Udostępnij za pośrednictwem


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

  1. Tworzenie rozszerzenie elementu projektu, rozszerzenie projektu lub definicji nowy typ elementu projektu.Aby uzyskać więcej informacji zobacz następujące tematy:

  2. Do rozszerzenia obsługi DeploymentStepStarted zdarzenia ISharePointProjectItemType obiektu (w rozszerzenie elementu projektu lub rozszerzenie projektu) lub ISharePointProjectItemTypeDefinition obiektu (w definicji nowy typ elementu projektu).

  3. 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.

  4. 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

Porady: uruchamianie kodu w trakcie kroków wdrożeniowych

Porady: tworzenie polecenia SharePoint