Compartilhar via


Como: Lidar com 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 atual do projeto já existem 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 manipular 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 o evento de um ISharePointProjectItemType 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 a propriedade do parâmetro de argumentos de evento 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ê definir 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 a propriedade do parâmetro de argumentos de evento. Embora geralmente faz sentido para detectar conflitos durante interno AddSolution etapa de implantação, você pode verificar se há conflitos durante qualquer etapa de implantação.

  4. Se houver um conflito, use o Add método de 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 Add método, também especificar o método que é chamado para resolver o conflito.

Exemplo

O exemplo de código a seguir demonstra o processo básico para tratar de um conflito de implantação de 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 de caracteres 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 a existência de um conflito de implantação (ou seja, ele sempre adiciona uma nova 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 de. Por exemplo, você pode usar o e.ProjectItem.Files a 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 do 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 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 pacote de extensão (VSIX) para o assembly e outros arquivos que você deseja distribuir com extensão. Para obter mais informações, consulte Implantar extensões para as ferramentas do SharePoint em Visual Studio.

Consulte também

Tarefas

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

Outros recursos

Implantação e estendendo empacotamento do SharePoint

Estendendo os itens de projeto do SharePoint

Como: Criar um comando do SharePoint

Histórico de alterações

Date

History

Motivo

Maio de 2010

Tópico adicional.

Aprimoramento de informações.