Wskazówki: tworzenie rozszerzenia projektu SharePoint
Ten instruktaż ilustruje sposób tworzenia rozszerzenie dla projektów programu SharePoint.Rozszerzenie projektu można użyć do reagowania na zdarzenia poziomu projektu, takie jak kiedy projekt jest dodane, usunięte lub zmieniono jego nazwę.Można również dodać właściwości niestandardowe lub reagować, gdy wartość właściwości zostanie zmieniona.W odróżnieniu od rozszerzeń element projektu projekt rozszerzeń nie może być skojarzony z określonym typem projektu programu SharePoint.Podczas tworzenia rozszerzenie projektu rozszerzenie ładuje przy wszelkiego rodzaju projektu programu SharePoint jest otwarty w Visual Studio.
W tym instruktażu będzie utworzyć niestandardową właściwość logiczna, która jest dodawany do każdego projektu programu SharePoint, utworzona w Visual Studio.Po ustawieniu True, Nowa właściwość dodaje lub map obrazów folder zasobów do projektu.Po ustawieniu False, usunięty folder obrazy, jeśli istnieje.Aby uzyskać więcej informacji, zobacz Porady: dodawanie i usuwanie folderów mapowanych.
W tym instruktażu przedstawiono następujące zadania:
Tworzenie Visual Studio rozszerzenia dla projektów programu SharePoint, które wykonuje następujące czynności:
Dodaje właściwość niestandardową projektu do okna właściwości.Właściwość ma zastosowanie do każdego projektu programu SharePoint.
Używa modelu obiektowego projektu programu SharePoint, aby dodać zmapowanego folderu do projektu.
Używa Visual Studio modelu obiektów automatyzacji (DTE), aby usunąć folder mapowane z projektu.
Budowa Visual Studio pakiet rozszerzenia (VSIX) do wdrażania zestawu rozszerzenie właściwość projektu.
Debugowanie i badania właściwości projektu.
Wymagania wstępne
Potrzebne są następujące składniki na komputerze deweloperskim do przeprowadzenia tego instruktażu:
Obsługiwane wersje programu Microsoft Windows, SharePoint i Visual Studio.Aby uzyskać więcej informacji, zobacz Wymagania związane z opracowywaniem rozwiązań SharePoint.
The Visual Studio SDK.W tym instruktażu wykorzystano Projektu VSIX szablon w SDK Aby utworzyć pakiet VSIX wdrożyć rozszerzenie właściwości projektu.Aby uzyskać więcej informacji, zobacz Rozszerzanie Narzędzi SharePoint w Visual Studio.
Tworzenie projektów
Do przeprowadzenia tego instruktażu, należy utworzyć dwa projekty:
Aby utworzyć pakiet VSIX wdrożyć rozszerzenie projektu projekt VSIX.
Projektu biblioteki klas, który implementuje rozszerzenie projektu.
Instruktaż należy rozpocząć od utworzenia projektów.
Aby utworzyć projekt VSIX
Start Visual Studio.
Na pasku menu wybierz pliku, Nowa, Projekt.
W Nowy projekt okno dialogowe rozwiń Visual C# lub języka Visual Basic węzłów, a następnie wybierz polecenie rozszerzalności węzła.
[!UWAGA]
Ten węzeł jest dostępne tylko po zainstalowaniu programu Visual Studio SDK.Aby uzyskać więcej informacji zobacz sekcję Warunki wstępne, wcześniej w tym temacie.
W górnej części okna dialogowego wybierz 4.5.NET Framework wersji.NET Framework na liście, a następnie wybierz Projektu VSIX szablonu.
W Nazwa wprowadź ProjectExtensionPackage, a następnie wybierz polecenie OK przycisk.
ProjectExtensionPackage projekt pojawia się w Solution Explorer.
Aby utworzyć rozszerzenie projektu
W Solution Explorer, otwórz menu skrótów dla węzła rozwiązanie, wybierz Dodaj, a następnie wybierz polecenie Nowy projekt.
[!UWAGA]
W Visual Basic projektów, węzeł rozwiązanie pojawia się w Solution Explorer tylko wtedy, gdy Zawsze pokazuj rozwiązanie pole wyboru jest zaznaczone w Ogólne, Projekty i rozwiązania, Opcje — okno dialogowe.
W Nowy projekt okno dialogowe rozwiń Visual C# lub języka Visual Basic węzły, a następnie wybierz polecenie Windows.
W górnej części okna dialogowego wybierz opcję 4.5.NET Framework wersji.NET Framework na liście, a następnie wybierz Biblioteka klas szablonu projektu.
W Nazwa wprowadź ProjectExtension, a następnie wybierz polecenie OK przycisk.
Visual Studiododaje ProjectExtension projektu do rozwiązania i otwiera plik domyślny kod Class1.
Usuń plik Class1 kodu z projektu.
Konfigurowanie projektu
Przed pisać kod, aby utworzyć rozszerzenie projektu należy dodać kod plików i odwołania do zestawów do rozszerzenie projektu.
Aby skonfigurować projektu
Dodawanie pliku kodu o nazwie właściwości niestandardowej do projektu ProjectExtension.
Otwórz menu skrótów dla ProjectExtension projektu, a następnie wybierz Dodaj odwołanie.
W Reference Manager — właściwości niestandardowej okno dialogowe Wybierz Framework węzła, a następnie zaznacz pole wyboru obok zestawów System.ComponentModel.Composition i System.Windows.Forms.
Wybierz rozszerzenia węzła, zaznacz pole wyboru obok zestawów Microsoft.VisualStudio.SharePoint i EnvDTE, a następnie wybierz OK przycisk.
W Solution Explorerpod odwołania folder dla ProjectExtension projektu, wybierz opcję EnvDTE.
W Właściwości okna, zmiana Osadzić typy współdziałania z modelem właściwość, aby False.
Definiowanie właściwości nowego projektu programu SharePoint
Tworzenie klasy, która określa rozszerzenie projektu i zachowanie właściwości nowego projektu.Aby zdefiniować nowe rozszerzenie projektu implementuje klasy ISharePointProjectExtension interfejsu.Implementuje ten interfejs, w każdym przypadku, gdy chcesz zdefiniować rozszerzenie projektu programu SharePoint.Ponadto, dodać ExportAttribute do klasy.Atrybut ten umożliwia Visual Studio do odnajdowania i załadować Twoje ISharePointProjectExtension realizacji.Przekazać ISharePointProjectExtension typ atrybut konstruktora.
Aby zdefiniować nowe właściwości projektu programu SharePoint
Wklej następujący kod do pliku kod właściwości niestandardowej.
Imports System Imports System.Linq Imports System.ComponentModel Imports System.ComponentModel.Composition Imports System.Windows.Forms Imports Microsoft.VisualStudio.SharePoint Imports EnvDTE Namespace Contoso.SharePointProjectExtensions.MapImagesFolder ' Export attribute: Enables Visual Studio to discover and load this extension. ' MapImagesFolderProjectExtension class: Adds a new Map Images Folder property to any SharePoint project. <Export(GetType(ISharePointProjectExtension))> _ Public Class MapImagesFolderProjectExtension Implements ISharePointProjectExtension Public Sub Initialize(ByVal projectService As ISharePointProjectService) Implements ISharePointProjectExtension.Initialize AddHandler projectService.ProjectPropertiesRequested, AddressOf Me.projectService_ProjectPropertiesRequested End Sub Private Sub projectService_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 = Nothing Private Const MapImagesFolderPropertyDefaultValue As Boolean = False Private Const MapImagesFolderPropertyId = "ContosoMapImagesFolderProperty" Public Sub New(ByVal myProject As ISharePointProject) sharePointProject = myProject End Sub ' Represents the new boolean property MapImagesFolder. ' True = Map an Images folder to the project if one does not already exist; otherwise, do nothing. ' False = Remove the Images folder from the project, if one exists; otherwise, do nothing. <DisplayName("Map Images Folder")> _ <DescriptionAttribute("Specifies whether an Images folder is mapped to the SharePoint project.")> _ <DefaultValue(MapImagesFolderPropertyDefaultValue)> _ Public Property MapImagesFolder As Boolean Get Dim propertyStringValue 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(MapImagesFolderPropertyId, propertyStringValue) Then Return MapImagesFolderPropertyDefaultValue Else Return CBool(propertyStringValue) End If End Get Set(ByVal value As Boolean) If value Then If Not ImagesMappedFolderInProjectExists(sharePointProject) Then ' An Images folder is not mapped to the project, so map one. Dim mappedFolder As IMappedFolder = sharePointProject.MappedFolders.Add(MappedFolderType.Images) sharePointProject.ProjectService.Logger.WriteLine( _ mappedFolder.Name & " mapped folder added to the project.", LogCategory.Status) End If ElseIf (ImagesMappedFolderInProjectExists(sharePointProject) AndAlso UserSaysDeleteFile()) Then ' An Images folder is mapped to the project and the user wants to remove it. DeleteFolder() End If sharePointProject.ProjectUserFileData(MapImagesFolderPropertyId) = value.ToString() End Set End Property Private Function ImagesMappedFolderInProjectExists(ByVal sharePointProject As ISharePointProject) As Boolean Dim returnValue As Boolean = False For Each folder As IMappedFolder In sharePointProject.MappedFolders ' Check to see if an Images folder is already mapped. If (folder.FolderType = MappedFolderType.Images) Then returnValue = True End If Next Return returnValue End Function Private Function UserSaysDeleteFile() As Boolean ' Ask the user whether they want to delete the Images folder. Dim returnValue As Boolean = False If (MessageBox.Show("Do you want to delete the Images folder from the project?", _ "Delete the Images folder?", MessageBoxButtons.YesNo) = DialogResult.Yes) Then returnValue = True End If Return returnValue End Function Private Sub DeleteFolder() ' The Visual Studio DTE object model is required to delete the mapped folder. Dim dteProject As EnvDTE.Project = _ sharePointProject.ProjectService.Convert(Of ISharePointProject, EnvDTE.Project)(sharePointProject) Dim targetFolderName As String = _ sharePointProject.MappedFolders.First(Function(mf) mf.FolderType = MappedFolderType.Images).Name Dim mappedFolderItem As EnvDTE.ProjectItem = dteProject.ProjectItems.Item(targetFolderName) mappedFolderItem.Delete() sharePointProject.ProjectService.Logger.WriteLine("Mapped Folder " & _ targetFolderName & " deleted", LogCategory.Status) End Sub End Class End Namespace
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.ComponentModel; using System.ComponentModel.Composition; using System.Windows.Forms; using Microsoft.VisualStudio.SharePoint; using EnvDTE; // Adds a new property called MapImagesFolder to any SharePoint project. // When MapImagesFolder is set to true, the Image folder is mapped to the project. // When MapImagesFolder is set to false, the Image folder is deleted from the project. namespace SP_Project_Extension { // Export attribute: Enables Visual Studio to discover and load this extension. [Export(typeof(ISharePointProjectExtension))] // Defines a new custom project property that applies to any SharePoint project. public class SPProjectExtension : ISharePointProjectExtension { // Implements ISharePointProjectService.Initialize, which determines the behavior of the new property. public void Initialize(ISharePointProjectService projectService) { // Handle events for when a project property is changed. projectService.ProjectPropertiesRequested += new EventHandler<SharePointProjectPropertiesRequestedEventArgs>(projectService_ProjectPropertiesRequested); } void projectService_ProjectPropertiesRequested(object sender, SharePointProjectPropertiesRequestedEventArgs e) { // Add a new property to the SharePoint project. e.PropertySources.Add((object)new ImagesMappedFolderProperty(e.Project)); } } public class ImagesMappedFolderProperty { ISharePointProject sharePointProject = null; public ImagesMappedFolderProperty(ISharePointProject myProject) { sharePointProject = myProject; } static bool MapFolderSetting = false; [DisplayName("Map Images Folder")] [DescriptionAttribute("Specifies whether an Images folder is mapped to the SharePoint project.")] public bool MapImagesFolder // Represents the new boolean property MapImagesFolder. // True = Map an Images folder to the project if one does not already exist; otherwise, do nothing. // False = Remove the Images folder from the project, if one exists; otherwise, do nothing. { get { // Get the current property value. return MapFolderSetting; } set { if (value) { if (!ImagesMappedFolderInProjectExists(sharePointProject)) { // An Images folder is not mapped to the project, so map one. IMappedFolder mappedFolder1 = sharePointProject.MappedFolders.Add(MappedFolderType.Images); // Add a note to the logger that a mapped folder was added. sharePointProject.ProjectService.Logger.WriteLine("Mapped Folder added:" + mappedFolder1.Name, LogCategory.Status); } } else { if (ImagesMappedFolderInProjectExists(sharePointProject) && UserSaysDeleteFile()) { // An Images folder is mapped to the project and the user wants to remove it. // The Visual Studio DTE object model is required to delete the mapped folder. // Reference the Visual Studio DTE model, get handles for the SharePoint project and project items. EnvDTE.Project dteProject = sharePointProject.ProjectService.Convert<ISharePointProject, EnvDTE.Project>(sharePointProject); string targetFolderName = sharePointProject.MappedFolders.First(mf => mf.FolderType == MappedFolderType.Images).Name; EnvDTE.ProjectItem mappedFolderItem = dteProject.ProjectItems.Item(targetFolderName); mappedFolderItem.Delete(); sharePointProject.ProjectService.Logger.WriteLine("Mapped Folder " + targetFolderName + " deleted", LogCategory.Status); } } MapFolderSetting = value; } } private bool ImagesMappedFolderInProjectExists(ISharePointProject sharePointProject) { bool retVal = false; foreach (IMappedFolder folder in sharePointProject.MappedFolders) { // Check to see if an Images folder is already mapped. if (folder.FolderType == MappedFolderType.Images) retVal = true; } return retVal; } private bool UserSaysDeleteFile() { // Prompt the user whether they want to delete the Images folder. bool retVal = false; if (MessageBox.Show("Do you want to delete the Images folder from the project?", "Delete the Images folder?", MessageBoxButtons.YesNo) == DialogResult.Yes) { retVal = true; } return retVal; } } }
Budowania rozwiązania
Następnie zbudować rozwiązanie, aby upewnić się, że skompilowany bez błędów.
Rozwiązanie
- Na pasku menu wybierz budować, Budowania rozwiązania.
Tworzenie pakiet VSIX wdrożyć rozszerzenie właściwości projektu
Aby wdrożyć rozszerzenie projektu, należy użyć projektu VSIX w swoje rozwiązanie, aby utworzyć pakiet VSIX.Najpierw należy skonfigurować pakiet VSIX modyfikując plik source.extension.vsixmanifest, który jest zawarty w projekcie VSIX.Następnie utwórz pakiet VSIX przez budowania rozwiązania.
Aby skonfigurować i utworzyć pakiet VSIX
W Solution Explorer, aby otworzyć menu skrótów dla pliku source.extension.vsixmanifest, a następnie wybierz Otwórz przycisk.
Visual StudioOtwiera plik manifestu projektanta.Informacje wyświetlane w metadane kartę pojawia się również w rozszerzenia i aktualizacje. Wszystkie pakiety VSIX wymagają pliku extension.vsixmanifest.Aby uzyskać więcej informacji na temat tego pliku, zobacz VSIX rozszerzenie schematu odwołania.
W Nazwa produktu wprowadź Niestandardowe właściwości projektu.
W autora wprowadź Contoso.
W Opis wprowadź niestandardowe właściwości projektu programu SharePoint Włącza lub wyłącza mapowanie folderu Obrazy zasobów do projektu.
Wybierz aktywów kartę, a następnie wybierz Nowa przycisk.
Dodać nowego środka pojawi się okno dialogowe.
W typu listy, wybierz opcję Microsoft.VisualStudio.MefComponent.
[!UWAGA]
Wartość ta odpowiada MEFComponent elementu w pliku extension.vsixmanifest.Ten element Określa nazwę zestawu rozszerzeń w pakiecie VSIX.Aby uzyskać więcej informacji, zobacz MEFComponent Element.
W źródło listy, wybierz opcję projektu w bieżącym rozwiązaniem przycisku opcji.
W Projekt listy, wybierz opcję ProjectExtension.
Ta wartość identyfikuje nazwę zespołu, budowany w projekcie.
Wybierz OK zamknąć Dodać nowego środka okno dialogowe.
Na pasku menu wybierz pliku, Zapisz wszystkie kiedy zakończyć, a następnie zamknij projektanta manifestu.
Na pasku menu wybierz budować, Budowania rozwiązania, a następnie upewnij się, że projekt kompiluje się bez błędów.
W Solution Explorer, otwórz menu skrótów dla ProjectExtensionPackage projektu, a następnie wybierz polecenie Otwórz Folder w Eksploratorze przycisk.
W Explorer plik, otwórz folder wyjściowy kompilacji dla projektu ProjectExtensionPackage i sprawdź, że folder zawiera plik o nazwie ProjectExtensionPackage.vsix.
Domyślnie folder wyjściowy kompilacji jest...folder \bin\Debug w folderze, który zawiera plik projektu.
Badania właściwości projektu
Teraz możesz przetestować właściwości niestandardowych projektu.To najłatwiejszy do debugowania i przetestować nowe rozszerzenie właściwości projektu w wystąpieniu doświadczalnych Visual Studio.To wystąpienie Visual Studio jest tworzony podczas uruchamiania projekt rozszerzalność lub VSIX.Po debugowania projektu, można zainstalować rozszerzenia w systemie, a następnie kontynuować testowanie go w regularnych wystąpienie Visual Studio.
Do debugowania i przetestować rozszerzenia w doświadczalnych wystąpienie programu Visual Studio
Uruchom ponownie Visual Studio z poświadczeniami administracyjnymi, a następnie otwórz rozwiązanie ProjectExtensionPackage.
Rozpocznij kompilacja do debugowania projektu przez wybranie F5 kluczy lub na pasku, wybierając menu Debug, Start Debugging.
Visual Studiorozszerzenie do %UserProfile%\AppData\Local\Microsoft\VisualStudio\11.0Exp\Extensions\Contoso\Custom Property\1.0 projektu i rozpoczyna eksperymentalne wystąpienie Visual Studio.
W wystąpieniu doświadczalnych Visual Studio, tworzenie projektu programu SharePoint dla roztworu farmy i użyć wartości domyślnych dla innych wartości w kreatorze.
Na pasku menu wybierz pliku, Nowa, Projekt.
W górnej części Nowy projekt okno dialogowe Wybierz 3.5.NET Framework na liście wersje.NET Framework.
Rozszerzenia narzędzi programu SharePoint wymaga funkcji w tej wersji .NET Framework.
Pod Szablony węzła, rozwiń węzeł Visual C# lub języka Visual Basic węzeł, wybierz SharePoint węzła, a następnie wybierz 2010 węzła.
Wybierz Projektu programu SharePoint 2010 szablon, a następnie wprowadź ModuleTest jako nazwę projektu.
W Solution Explorer, wybierz opcję ModuleTest węzła projektu.
Nowe właściwości niestandardowej Folder obrazów Map pojawia się w Właściwości okno z wartości domyślnej False.
Zmień wartość tej właściwości, aby True.
Folder Images zasób jest dodawany do projektu programu SharePoint.
Zmień wartość tej właściwości z powrotem do False.
Jeśli wybierzesz Tak przycisk w usunąć folder Obrazy? okno dialogowe, obrazy, folder zasobów zostanie usunięty z projektu programu SharePoint.
Zamknij doświadczalnych wystąpienie Visual Studio.
Zobacz też
Koncepcje
Rozszerzanie projektów SharePoint
Porady: dodawanie właściwości do projektów SharePoint
Konwertowanie pomiędzy typami systemu projektu SharePoint a innymi typami projektu Visual Studio
Zapisywanie danych w rozszerzeniach systemu projektu SharePoint
Kojarzenie danych niestandardowych z rozszerzeniami narzędzi SharePoint