Porady: obsługa konfliktów wdrożenia
Można podać kod do obsługi wdrażania konfliktów dla elementu projektu do programu SharePoint.Na przykład może ustalić, czy wszystkie pliki w bieżącym elemencie projektu już istnieje w lokalizacji rozmieszczania, a następnie usuń pliki wdrożonego, przed wdrożeniem bieżącego elementu projektu.Aby uzyskać więcej informacji o konfliktach wdrażania, zobacz Rozszerzanie pakowania i wdrażania SharePoint.
Do obsługi konfliktu wdrażania
Tworzenie rozszerzenie elementu projektu, rozszerzenie projektu lub definicji nowy typ elementu projektu.Aby uzyskać więcej informacji zobacz następujące tematy:
Do rozszerzenia obsługi DeploymentStepStarted zdarzenia ISharePointProjectItemType obiektu (w rozszerzenie elementu projektu lub rozszerzenie projektu) lub ISharePointProjectItemTypeDefinition obiektu (w definicji nowy typ elementu projektu).
W procedurze obsługi zdarzenia należy ustalić, czy istnieje konflikt między element projektu, który jest wdrażana i roztwór wdrożonego w witrynie programu SharePoint na podstawie kryteriów, które stosuje się do danego scenariusza.Można użyć ProjectItem właściwości parametru argumenty zdarzeń do analizowania element projektu, który jest wdrażana, a można analizować plików w lokalizacji wdrażania przez wywołanie polecenia programu SharePoint, które można zdefiniować w tym celu.
Dla wielu typów konflikty najpierw warto ustalić, który wdrażania krok jest wykonywany.Można to zrobić za pomocą DeploymentStepInfo właściwości parametru argumenty zdarzeń.Chociaż zazwyczaj warto wykrywania konfliktów podczas wbudowanych AddSolution krok wdrażania można sprawdzić, czy konflikty podczas jakichkolwiek kroków wdrażania.
Jeśli występuje konflikt, należy użyć [M:Microsoft.VisualStudio.SharePoint.Deployment.IDeploymentConflictCollection.Add(System.String,System.Func`2,System.Boolean)] metoda Conflicts właściwość argumentów zdarzeń, aby utworzyć nową IDeploymentConflict obiektu.Ten obiekt reprezentuje konfliktu wdrażania.W zadzwonić do [M:Microsoft.VisualStudio.SharePoint.Deployment.IDeploymentConflictCollection.Add(System.String,System.Func`2,System.Boolean)] metodę, również określić metodę, która jest wywoływana w celu rozwiązania konfliktu.
Przykład
Poniższy przykład kodu pokazuje podstawowy proces obsługi konfliktu wdrażania w rozszerzenie elementu projektu do listy definicji projektu elementów.Do obsługi konfliktu wdrażania dla innego typu elementu projektu, należy przekazać innym ciągiem do SharePointProjectItemTypeAttribute.Aby uzyskać więcej informacji, zobacz Rozszerzanie pozycji projektu SharePoint.
Dla uproszczenia DeploymentStepStarted obsługi zdarzeń w tym przykładzie założono, że konflikt wdrażania istnieje (to znaczy, zawsze dodaje nowy IDeploymentConflict obiektu) oraz Resolve metoda po prostu zwraca true do wskazania, że konflikt został rozwiązany.W scenariuszu real na DeploymentStepStarted będzie najpierw ustalić, czy istnieje konflikt między plik w bieżącym elemencie projektu i pliku w lokalizacji wdrażania programu obsługi zdarzeń, a następnie dodaj IDeploymentConflict obiektu tylko, jeśli istnieje konflikt.Na przykład, można użyć e.ProjectItem.Files właściwość w obsłudze zdarzeń do Analizuj pliki w element projektu, a może wywołać polecenie Analizuj pliki w lokalizacji wdrażania programu SharePoint.Podobnie, w rzeczywistym scenariusz Resolve metoda może wywoływać polecenia programu SharePoint, aby rozwiązać konflikt w witrynie programu SharePoint.Aby uzyskać więcej informacji o tworzeniu poleceń programu SharePoint, zobacz Porady: tworzenie polecenia SharePoint.
Imports Microsoft.VisualStudio.SharePoint
Imports Microsoft.VisualStudio.SharePoint.Deployment
Imports System.ComponentModel.Composition
<Export(GetType(ISharePointProjectItemTypeExtension))>
<SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.ListDefinition")>
Public Class DeploymentConflictExtension
Implements ISharePointProjectItemTypeExtension
Private Sub Initialize(ByVal projectItemType As ISharePointProjectItemType) _
Implements ISharePointProjectItemTypeExtension.Initialize
AddHandler projectItemType.DeploymentStepStarted, AddressOf DeploymentStepStarted
End Sub
Private Sub DeploymentStepStarted(ByVal Sender As Object, ByVal e As DeploymentStepStartedEventArgs)
If e.DeploymentStepInfo.Id = DeploymentStepIds.AddSolution Then
e.Conflicts.Add("This is an example conflict", AddressOf Me.Resolve, True)
e.ProjectItem.Project.ProjectService.Logger.WriteLine("Added new example conflict.", LogCategory.Status)
End If
End Sub
Private Function Resolve(ByVal projectItem As ISharePointProjectItem) As Boolean
projectItem.Project.ProjectService.Logger.WriteLine("Returning 'true' from Resolve method for example conflict.",
LogCategory.Status)
Return True
End Function
End Class
using Microsoft.VisualStudio.SharePoint;
using Microsoft.VisualStudio.SharePoint.Deployment;
using System.ComponentModel.Composition;
namespace Contoso.DeploymentConflictExtension
{
[Export(typeof(ISharePointProjectItemTypeExtension))]
[SharePointProjectItemType("Microsoft.VisualStudio.SharePoint.ListDefinition")]
class DeploymentConflictExtension : ISharePointProjectItemTypeExtension
{
public void Initialize(ISharePointProjectItemType projectItemType)
{
projectItemType.DeploymentStepStarted += DeploymentStepStarted;
}
private void DeploymentStepStarted(object sender, DeploymentStepStartedEventArgs e)
{
if (e.DeploymentStepInfo.Id == DeploymentStepIds.AddSolution)
{
e.Conflicts.Add("This is an example conflict", this.Resolve, true);
e.ProjectItem.Project.ProjectService.Logger.WriteLine("Added new example conflict.", LogCategory.Status);
}
}
private bool Resolve(ISharePointProjectItem projectItem)
{
projectItem.Project.ProjectService.Logger.WriteLine("Returning 'true' from Resolve method for example conflict.",
LogCategory.Status);
return true;
}
}
}
Kompilowanie kodu
W tym przykładzie wymaga odwołania do następujących zestawów:
Microsoft.VisualStudio.SharePoint
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ędzi SharePoint w Visual Studio.
Zobacz też
Koncepcje
Rozszerzanie pakowania i wdrażania SharePoint
Rozszerzanie pozycji projektu SharePoint