Jak: vyřešení konfliktů nasazení
Můžete poskytnout vlastní kód pro zpracování konfliktů nasazení pro položku projektu služby SharePoint.Může například určit, zda všechny soubory v aktuální položce projektu již existují v místě nasazení a odstraňte soubory nasazena před aktuální položky projektu nasazení.Další informace o nasazení konflikty, viz Rozšíření balení a nasazení služby SharePoint.
Zpracování konfliktů nasazení
Vytvořte rozšíření položky projektu, rozšíření projektu nebo definici nového typu položky projektu.Další informace naleznete v následujících tématech:
V rozšíření, zpracování DeploymentStepStarted události ISharePointProjectItemType objektu (v projektu rozšíření položky nebo rozšíření projektu) nebo ISharePointProjectItemTypeDefinition objektu (v definici nový typ položky projektu).
V obslužné rutině události určují, zda došlo ke konfliktu mezi položky projektu, který nasazuje a nasazeného řešení na webu služby SharePoint, na základě kritérií, které se vztahují k danému.Můžete použít ProjectItem vlastnost události argumenty parametru analyzovat položky projektu, který je nasazeno a analyzovat soubory na místě nasazení voláním SharePoint příkaz, který definujete pro tento účel.
Pro mnoho typů konfliktů nejprve můžete určit, které nasazení krok se provádí.Lze to provést pomocí DeploymentStepInfo vlastnost události argumenty parametru.I když nemá obvykle smysl rozpoznat konflikty během integrovaná AddSolution nasazení kroku můžete zkontrolovat konflikty během některého kroku nasazení.
Pokud existuje konflikt, [M:Microsoft.VisualStudio.SharePoint.Deployment.IDeploymentConflictCollection.Add(System.String,System.Func`2,System.Boolean)] metodu Conflicts vlastnost události argumenty pro vytvoření nového IDeploymentConflict objektu.Tento objekt představuje konflikt nasazení.Ve volání [M:Microsoft.VisualStudio.SharePoint.Deployment.IDeploymentConflictCollection.Add(System.String,System.Func`2,System.Boolean)] metoda, také určit metodu, která se nazývá vyřešit konflikt.
Příklad
Následující příklad kódu ukazuje základní proces pro zpracování nasazení konflikt v rozšíření pro položky projektu, pro definici položky projektu.Zpracování nasazení konflikt pro jiný typ projektu položky předat jiné řetězce SharePointProjectItemTypeAttribute.Další informace naleznete v tématu Rozšíření položky služby SharePoint projektu.
Pro jednoduchost DeploymentStepStarted obslužné rutiny události v tomto příkladu předpokládá, že existuje konflikt nasazení (je vždy přidá nový IDeploymentConflict objektu) a Resolve jednoduše vrátí metoda true označuje, že byl konflikt vyřešen.V reálné situaci vaše DeploymentStepStarted by nejprve zjistit, zda ke konfliktu mezi souborů v aktuální položce projektu a souborů v místě nasazení obslužnou rutinu události a potom přidejte IDeploymentConflict objektu pouze, pokud existuje konflikt.Například můžete použít e.ProjectItem.Files vlastnosti obslužné rutiny události analyzovat soubory v položce projektu a může volat příkaz analyzovat soubory na místě nasazení služby SharePoint.Podobně v reálné situaci Resolve SharePoint příkaz vyřešit konflikt na webu služby SharePoint může volání metody.Další informace o vytváření SharePoint příkazy, viz Jak: Vytvoření příkazu 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;
}
}
}
Probíhá kompilace kódu
Tento příklad vyžaduje odkazy na následující sestavení:
Microsoft.VisualStudio.SharePoint
System.ComponentModel.Composition
Nasazování rozšíření
Chcete-li nasadit rozšíření, vytvořte Visual Studio balíček rozšíření (VSIX) pro sestavení a všechny další soubory, které chcete distribuovat s rozšířením.Další informace naleznete v tématu Nasazování rozšíření pro nástroje služby SharePoint v aplikaci Visual Studio.
Viz také
Koncepty
Rozšíření balení a nasazení služby SharePoint
Rozšíření položky služby SharePoint projektu