Jak: Dodawanie właściwości do projektów programu SharePoint
Rozszerzenie projektu można użyć, aby dodać właściwości do każdego projektu programu SharePoint.Właściwość pojawia się w Właściwości okno po wybraniu projektu w Solution Explorer.
Poniższe informacje dotyczą przypadków zostały już utworzone rozszerzenie projektu.Aby uzyskać więcej informacji, zobacz Jak: tworzenie rozszerzenie projektu programu SharePoint.
Aby dodać właściwości do projektu programu SharePoint
Definiowanie klasy z własności publicznej, która reprezentuje właściwości, które dodajesz do projektów programu SharePoint.Jeśli chcesz dodać wiele właściwości można zdefiniować wszystkie właściwości w tej samej klasie lub w różnych klas.
W Initialize metody na ISharePointProjectExtension realizacji, uchwyt ProjectPropertiesRequested zdarzenia projectService parametru.
W obsłudze zdarzeń dla ProjectPropertiesRequested zdarzenia, należy dodać instancję klasy właściwości do PropertySources kolekcji parametr argumenty zdarzeń.
Przykład
Poniższy przykład kodu demonstruje, jak dodać dwie właściwości do projektów programu SharePoint.Jedną właściwość będzie się powtarzał swoje dane w pliku projektu użytkownika opcji (. plik csproj.user lub. vbproj.user pliku).Inne właściwości będzie się powtarzał swoje dane w pliku projektu (pliku .csproj lub .vbproj).
Imports System
Imports System.ComponentModel
Imports System.ComponentModel.Composition
Imports Microsoft.VisualStudio
Imports Microsoft.VisualStudio.SharePoint
Imports Microsoft.VisualStudio.Shell.Interop
Namespace CustomSharePointProperty
<Export(GetType(ISharePointProjectExtension))> _
Partial Friend Class ProjectExtensionWithProperty
Implements ISharePointProjectExtension
Public Sub Initialize(ByVal projectService As ISharePointProjectService) _
Implements ISharePointProjectExtension.Initialize
AddHandler projectService.ProjectPropertiesRequested, _
AddressOf ProjectPropertiesRequested
End Sub
Private Sub ProjectPropertiesRequested(ByVal sender As Object, _
ByVal e As SharePointProjectPropertiesRequestedEventArgs)
Dim propertiesObject As CustomProjectProperties = Nothing
' If the properties object already exists, get it from the project's annotations.
If False = e.Project.Annotations.TryGetValue(propertiesObject) Then
' Otherwise, create a new properties object and add it to the annotations.
propertiesObject = New CustomProjectProperties(e.Project)
e.Project.Annotations.Add(propertiesObject)
End If
e.PropertySources.Add(propertiesObject)
End Sub
End Class
Public Class CustomProjectProperties
Private sharePointProject As ISharePointProject
Private projectStorage As IVsBuildPropertyStorage
Private Const ProjectFilePropertyId As String = "ContosoCustomProjectFileProperty"
Private Const ProjectFilePropertyDefaultValue As String = "Default"
Public Sub New(ByVal myProject As ISharePointProject)
sharePointProject = myProject
projectStorage = sharePointProject.ProjectService.Convert(Of ISharePointProject, IVsBuildPropertyStorage)(sharePointProject)
End Sub
<DisplayName("Custom Project File Property")> _
<DescriptionAttribute("This property is saved to the .csproj/.vbproj file.")> _
<DefaultValue(ProjectFilePropertyDefaultValue)> _
Public Property CustomProjectFileProperty As String
Get
Dim propertyValue As String = String.Empty
Dim hr As Integer = projectStorage.GetPropertyValue(ProjectFilePropertyId, String.Empty, _
CUInt(_PersistStorageType.PST_PROJECT_FILE), propertyValue)
' Try to get the current value from the project file; if it does not yet exist, return a default value.
If Not ErrorHandler.Succeeded(hr) Or String.IsNullOrEmpty(propertyValue) Then
propertyValue = ProjectFilePropertyDefaultValue
End If
Return propertyValue
End Get
Set(ByVal value As String)
' Do not save the default value.
If value <> ProjectFilePropertyDefaultValue Then
projectStorage.SetPropertyValue(ProjectFilePropertyId, String.Empty, _
CUInt(_PersistStorageType.PST_PROJECT_FILE), value)
End If
End Set
End Property
Private Const UserFilePropertyId As String = "ContosoCustomUserFileProperty"
Private Const UserFilePropertyDefaultValue As String = "Default"
<DisplayName("Custom Project User File Property")> _
<DescriptionAttribute("This property is saved to the .user file.")> _
<DefaultValue(UserFilePropertyDefaultValue)> _
Public Property CustomUserFileProperty As String
Get
Dim propertyValue As String = String.Empty
' Try to get the current value from the .user file; if it does not yet exist, return a default value.
If Not sharePointProject.ProjectUserFileData.TryGetValue(UserFilePropertyId, propertyValue) Then
propertyValue = UserFilePropertyDefaultValue
End If
Return propertyValue
End Get
Set(ByVal value As String)
' Do not save the default value.
If value <> UserFilePropertyDefaultValue Then
sharePointProject.ProjectUserFileData(UserFilePropertyId) = value
End If
End Set
End Property
End Class
End Namespace
using System;
using System.ComponentModel;
using System.ComponentModel.Composition;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.SharePoint;
using Microsoft.VisualStudio.Shell.Interop;
namespace CustomSharePointProperty
{
[Export(typeof(ISharePointProjectExtension))]
public class ProjectExtensionWithProperty : ISharePointProjectExtension
{
public void Initialize(ISharePointProjectService projectService)
{
projectService.ProjectPropertiesRequested += projectService_ProjectPropertiesRequested;
}
void projectService_ProjectPropertiesRequested(object sender, SharePointProjectPropertiesRequestedEventArgs e)
{
CustomProjectProperties propertiesObject;
// If the properties object already exists, get it from the project's annotations.
if (!e.Project.Annotations.TryGetValue(out propertiesObject))
{
// Otherwise, create a new properties object and add it to the annotations.
propertiesObject = new CustomProjectProperties(e.Project);
e.Project.Annotations.Add(propertiesObject);
}
e.PropertySources.Add(propertiesObject);
}
}
public class CustomProjectProperties
{
private ISharePointProject sharePointProject;
private IVsBuildPropertyStorage projectStorage;
private const string ProjectFilePropertyId = "ContosoCustomProjectFileProperty";
private const string ProjectFilePropertyDefaultValue = "Default";
public CustomProjectProperties(ISharePointProject myProject)
{
sharePointProject = myProject;
projectStorage = sharePointProject.ProjectService.Convert<ISharePointProject, IVsBuildPropertyStorage>(sharePointProject);
}
[DisplayName("Custom Project File Property")]
[DescriptionAttribute("This property is saved to the .csproj/.vbproj file.")]
[DefaultValue(ProjectFilePropertyDefaultValue)]
public string CustomProjectFileProperty
{
get
{
string propertyValue;
int hr = projectStorage.GetPropertyValue(ProjectFilePropertyId, string.Empty,
(uint)_PersistStorageType.PST_PROJECT_FILE, out propertyValue);
// Try to get the current value from the project file; if it does not yet exist, return a default value.
if (!ErrorHandler.Succeeded(hr) || String.IsNullOrEmpty(propertyValue))
{
propertyValue = ProjectFilePropertyDefaultValue;
}
return propertyValue;
}
set
{
// Do not save the default value.
if (value != ProjectFilePropertyDefaultValue)
{
projectStorage.SetPropertyValue(ProjectFilePropertyId, string.Empty,
(uint)_PersistStorageType.PST_PROJECT_FILE, value);
}
}
}
private const string UserFilePropertyId = "ContosoCustomUserFileProperty";
private const string UserFilePropertyDefaultValue = "Default";
[DisplayName("Custom Project User File Property")]
[DescriptionAttribute("This property is saved to the .user file.")]
[DefaultValue(UserFilePropertyDefaultValue)]
public string CustomUserFileProperty
{
get
{
string propertyValue = string.Empty;
// Try to get the current value from the .user file; if it does not yet exist, return a default value.
if (!sharePointProject.ProjectUserFileData.TryGetValue(UserFilePropertyId, out propertyValue))
{
propertyValue = UserFilePropertyDefaultValue;
}
return propertyValue;
}
set
{
// Do not save the default value.
if (value != UserFilePropertyDefaultValue)
{
sharePointProject.ProjectUserFileData[UserFilePropertyId] = value;
}
}
}
}
}
Opis kodu
Aby zapewnić, że ta sama instancja CustomProjectProperties klasa jest używana przy każdym ProjectPropertiesRequested zdarzenie, przykładowy kod dodaje obiekt właściwości do Annotations właściwość czasu projektu pierwsze zdarzenie to występuje.Kod pobiera tego obiektu, w każdym przypadku, gdy to zdarzenie wystąpi ponownie.Aby uzyskać więcej informacji na temat za pomocą Annotations właściwość do kojarzenia danych z projektów, zobacz Kojarzenie danych niestandardowy z rozszerzeniami narzędzia programu SharePoint.
Aby utrwalić zmiany wartości właściwości set akcesorów właściwości przy użyciu następujących interfejsów API:
CustomUserFilePropertyużywa ProjectUserFileData właściwość, aby zapisać plik projektu użytkownika opcji jego wartość.
CustomProjectFilePropertyużywa IVsBuildPropertyStorage.SetPropertyValue metody, aby zapisać jego wartość w pliku projektu.
Aby uzyskać więcej informacji na temat istniejących danych w tych plikach, zobacz Zapisywanie danych w rozszerzeniach systemu projektu programu SharePoint.
Określanie zachowania właściwości niestandardowe
Można zdefiniować sposób właściwości niestandardowych i zachowaniem w Właściwości okno poprzez stosowanie atrybutów z System.ComponentModel obszaru nazw do definicji property.Następujące atrybuty są przydatne w wielu scenariuszach:
DisplayNameAttribute: Określa nazwę właściwości, która pojawia się w Właściwości okna.
DescriptionAttribute: Określa ciąg opisu, który pojawia się w dolnej części Właściwości okna, gdy właściwość jest wybrana.
DefaultValueAttribute: Określa wartość domyślną właściwości.
TypeConverterAttribute: Określa niestandardowe konwersji między ciąg, który jest wyświetlany w Właściwości okna i wartość właściwości nie będących ciągami.
EditorAttribute: Określa niestandardowe edytora użyć do modyfikowania właściwości.
Kompilowanie kodu
W tym przykładzie wymaga odwołania do następujących zestawów:
Microsoft.VisualStudio.SharePoint
Microsoft.VisualStudio.Shell
Microsoft.VisualStudio.Shell.Interop
Microsoft.VisualStudio.Shell.Interop.8.0
System.ComponentModel.Composition
Wdrażanie rozszerzenia
Aby wdrożyć rozszerzenia, tworzenie Visual Studio extension (VSIX) pakiet Zgromadzenia i inne pliki, które chcesz dystrybuować z rozszerzeniem.Aby uzyskać więcej informacji, zobacz Wdrażanie rozszerzeń dla narzędzia programu SharePoint w programie Visual Studio.
Zobacz też
Koncepcje
Rozszerzanie projektów programu SharePoint
Jak: tworzenie rozszerzenie projektu programu SharePoint
Jak: Dodawanie elementu Menu skrótów do projektów programu SharePoint