Сохранение данных в расширениях системы проектов SharePoint
При расширении системы проектов SharePoint можно сохранить строковые данные, которые должны оставаться неизменными после закрытия проекта SharePoint.Обычно такие данные связаны с определенным элементом проекта или с самим проектом.
Если имеются данные, сохранять которые не требуется, можно добавить их в любой объект объектной модели средств SharePoint, в котором реализован интерфейс IAnnotatedObject.Дополнительные сведения см. в разделе Связь пользовательских данных с расширениями средств SharePoint.
Сохранение данных, связанных с элементом проекта
Если имеются данные, связанные с определенным элементом проекта SharePoint (например, значение свойства, добавляемое в элемент проекта), их можно сохранить в файл с расширением SPDATA для элемента проекта.Для этого используйте свойство ExtensionData объекта ISharePointProjectItem.Данные, добавленные в это свойство, сохраняются в элементе ExtensionData в SPDATA-файле элемента проекта.Дополнительные сведения см. в разделе Элемент ExtensionData.
В следующем примере кода демонстрируется использование свойства ExtensionData для сохранения значения свойства (которое является строкой), определенного в настраиваемом типе элемента проекта SharePoint.Данный пример в контексте полного примера см. в разделе Практическое руководство. Добавление свойства в пользовательский тип элемента проекта SharePoint.
Private Const TestPropertyId As String = "Contoso.ExampleProperty"
Private Const PropertyDefaultValue As String = "This is an example property."
<DisplayName("Example Property")> _
<DescriptionAttribute("This is an example property for project items.")> _
<DefaultValue(PropertyDefaultValue)> _
Public Property ExampleProperty As String
Get
Dim propertyValue As String = Nothing
' Get the current property value if it already exists; otherwise, return a default value.
If False = projectItem.ExtensionData.TryGetValue(TestPropertyId, propertyValue) Then
propertyValue = PropertyDefaultValue
End If
Return propertyValue
End Get
Set(ByVal value As String)
If value <> PropertyDefaultValue Then
' Store the property value in the ExtensionData property of the project item.
' Data in the ExtensionData property persists when the project is closed.
projectItem.ExtensionData(TestPropertyId) = value
Else
' Do not save the default value.
projectItem.ExtensionData.Remove(TestPropertyId)
End If
End Set
End Property
private const string PropertyId = "Contoso.ExampleProperty";
private const string PropertyDefaultValue = "This is an example property.";
[DisplayName("Example Property")]
[DescriptionAttribute("This is an example property for project items.")]
[DefaultValue(PropertyDefaultValue)]
public string ExampleProperty
{
get
{
string propertyValue;
// Get the current property value if it already exists; otherwise, return a default value.
if (!projectItem.ExtensionData.TryGetValue(PropertyId, out propertyValue))
{
propertyValue = PropertyDefaultValue;
}
return propertyValue;
}
set
{
if (value != PropertyDefaultValue)
{
// Store the property value in the ExtensionData property of the project item.
// Data in the ExtensionData property persists when the project is closed.
projectItem.ExtensionData[PropertyId] = value;
}
else
{
// Do not save the default value.
projectItem.ExtensionData.Remove(PropertyId);
}
}
}
Сохранение данных, связанных с проектом
Если имеются данные на уровне проекта (например, значение свойства, добавляемое в проекты SharePoint), их можно сохранить в файл проекта (с расширением CSPROJ или VBPROJ) или файл пользовательских параметров проекта (с расширением CSPROJ.USER или VBPROJ.USER).Выбор файла для сохранения данных зависит от того, как будут использоваться эти данные.
Если требуется, чтобы данные были доступны всем разработчикам, открывающим проект SharePoint, сохраните их в файл проекта.Этот файл всегда возвращается в базу данных системы управления версиями, поэтому содержащиеся в нем данные доступны другим разработчикам, извлекающим этот проект.
Если требуется, чтобы данные были доступны только текущему разработчику, у которого проект SharePoint открыт в Visual Studio, сохраняйте их в файл пользовательских параметров проекта.Этот файл обычно не возвращается в базу данных системы управления версиями, поэтому содержащиеся в нем данные не доступны другим разработчикам, извлекающим этот проект.
Сохранение данных в файл проекта
Чтобы сохранить данные в файл проекта, преобразуйте объект ISharePointProject в объект IVsBuildPropertyStorage, затем воспользуйтесь методом IVsBuildPropertyStorage.SetPropertyValue.В следующем примере кода показано использование этого метода для сохранения значения свойства проекта в файл проекта.Данный пример в контексте полного примера см. в разделе Практическое руководство. Добавление свойства в проекты SharePoint.
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 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);
}
}
}
Дополнительные сведения о преобразовании объектов ISharePointProject в другие типы объектной модели автоматизации или объектной модели интеграции Visual Studio см. в разделе Преобразование между типами системы проектов SharePoint и другими типами проектов Visual Studio.
Сохранение данных в файл пользовательских параметров проекта
Чтобы сохранить данные в файл пользовательских параметров проекта, используйте свойство ProjectUserFileData объекта ISharePointProject.В следующем примере кода показано использование этого свойства для сохранения значения свойства проекта в файл пользовательских параметров проекта.Данный пример в контексте полного примера см. в разделе Практическое руководство. Добавление свойства в проекты SharePoint.
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
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;
}
}
}
См. также
Основные понятия
Расширение системы проектов SharePoint
Связь пользовательских данных с расширениями средств SharePoint
Преобразование между типами системы проектов SharePoint и другими типами проектов Visual Studio