Compartilhar via


Como: tratar conflitos de implantação

Você pode fornecer seu próprio código para lidar com conflitos de implantação para um item de projeto do SharePoint.Por exemplo, você pode determinar se todos os arquivos no item de projeto atual já existirem no local de implantação e exclua os arquivos implantados antes que o item de projeto atual seja implantado.Para obter mais informações sobre conflitos de implantação, consulte Implantação e estendendo empacotamento do SharePoint.

Para lidar com um conflito de implantação

  1. Crie uma extensão de item de projeto, uma extensão de projeto ou uma definição de um novo tipo de item de projeto.Para obter mais informações, consulte os seguintes tópicos:

  2. Na extensão, lidar com o DeploymentStepStarted evento de um ISharePointProjectItemType o objeto (em uma extensão de item de projeto ou a extensão de projeto) ou um ISharePointProjectItemTypeDefinition objeto (em uma definição de um novo tipo de item de projeto).

  3. No manipulador de eventos, determine se há um conflito entre o item de projeto que está sendo implantado e a solução implantada no site do SharePoint, com base em critérios que se aplicam à sua situação.Você pode usar o ProjectItem propriedade do parâmetro de argumentos de eventos para analisar o item de projeto que está sendo implantado e você pode analisar os arquivos no local de implantação, chamando um comando do SharePoint que você define para essa finalidade.

    Para muitos tipos de conflitos, primeiro convém determinar para qual etapa de implantação está em execução.Você pode fazer isso usando o DeploymentStepInfo propriedade do parâmetro de argumentos de evento.Embora geralmente faz sentido para detectar conflitos durante interno AddSolution a etapa de implantação, você pode verificar se há conflitos durante qualquer etapa de implantação.

  4. Se houver um conflito, use o [M:Microsoft.VisualStudio.SharePoint.Deployment.IDeploymentConflictCollection.Add(System.String,System.Func`2,System.Boolean)] método da Conflicts propriedade dos argumentos de evento para criar um novo IDeploymentConflict objeto.Este objeto representa o conflito de implantação.Na sua chamada para o [M:Microsoft.VisualStudio.SharePoint.Deployment.IDeploymentConflictCollection.Add(System.String,System.Func`2,System.Boolean)] método, também especificar o método que será chamado para resolver o conflito.

Exemplo

O exemplo de código a seguir demonstra o processo básico para lidar com um conflito de implantação em uma extensão de item de projeto para itens de projeto de definição de lista.Para lidar com um conflito de implantação para um tipo diferente de item de projeto, passar uma seqüência diferente para o SharePointProjectItemTypeAttribute.Para obter mais informações, consulte Estendendo os itens de projeto do SharePoint.

Para simplificar, o DeploymentStepStarted manipulador de eventos, neste exemplo pressupõe que existe um conflito de implantação (ou seja, ele sempre adiciona um novo IDeploymentConflict objeto) e o Resolve método simplesmente retorna true para indicar que o conflito foi resolvido.Em um cenário real, o DeploymentStepStarted manipulador de eventos deve primeiro determinar se houver um conflito entre um arquivo no item de projeto atual e um arquivo no local de implantação e adicione um IDeploymentConflict de objeto somente se houver um conflito.Por exemplo, você pode usar o e.ProjectItem.Files propriedade no manipulador de eventos para analisar os arquivos no item de projeto e você pode chamar um comando do SharePoint para analisar os arquivos no local de implantação.Da mesma forma, em um cenário real de Resolve método pode chamar um comando do SharePoint para resolver o conflito no site do SharePoint.Para obter mais informações sobre como criar comandos do SharePoint, consulte Como: criar um comando do 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;
        }
    }
}

Compilando o código

Este exemplo requer referências aos assemblies seguintes:

  • Microsoft.VisualStudio.SharePoint

  • System.ComponentModel.Composition

Implantação da extensão

Para implantar a extensão, criar um Visual Studio (VSIX) da extensão do pacote para o assembly e outros arquivos que você deseja distribuir com a extensão.Para obter mais informações, consulte Implantação de extensões para as ferramentas de SharePoint no Visual Studio.

Consulte também

Conceitos

Implantação e estendendo empacotamento do SharePoint

Estendendo os itens de projeto do SharePoint

Como: executar código quando etapas de implantação são executadas.

Como: criar um comando do SharePoint