다음을 통해 공유


방법: 배포 충돌 처리

업데이트: 2010년 5월

SharePoint 프로젝트 항목에 대한 배포 충돌을 처리하는 사용자 고유의 코드를 제공할 수 있습니다. 예를 들어, 현재 프로젝트 항목의 파일이 배포 위치에 이미 있는지 여부를 확인한 다음 현재 프로젝트 항목이 배포되기 전에 배포된 파일을 삭제할 수 있습니다. 배포 충돌에 대한 자세한 내용은 SharePoint 패키징 및 배포 확장을 참조하십시오.

배포 충돌을 처리하려면

  1. 프로젝트 항목 확장, 프로젝트 확장 또는 새 프로젝트 항목 형식의 정의를 만듭니다. 자세한 내용은 다음 항목을 참조하십시오.

  2. 확장에서 프로젝트 항목 확장이나 프로젝트 확장에 있는 ISharePointProjectItemType 개체 또는 새 프로젝트 항목 형식의 정의에 있는 ISharePointProjectItemTypeDefinition 개체의 DeploymentStepStarted 이벤트를 처리합니다.

  3. 이벤트 처리기에서 해당 시나리오에 적용되는 기준에 따라, 배포될 프로젝트 항목과 SharePoint 사이트의 배포된 솔루션 간에 충돌이 있는지 여부를 확인합니다. 이벤트 인수 매개 변수의 ProjectItem 속성을 사용하여 배포될 프로젝트 항목을 분석할 수 있으며, 이 용도로 정의한 SharePoint 명령을 호출하여 배포 위치의 파일을 분석할 수 있습니다.

    다양한 유형의 충돌에 대해 먼저 실행 중인 배포 단계를 확인하려고 할 수 있습니다. 이벤트 인수 매개 변수의 DeploymentStepInfo 속성을 사용하여 이 작업을 수행할 수 있습니다. 일반적으로 기본 제공 AddSolution 배포 단계 중에 충돌을 검색하는 것이 적합하지만 어떠한 배포 단계 중에도 충돌을 확인할 수 있습니다.

  4. 충돌이 있는 경우 이벤트 인수의 Conflicts 속성에 대한 Add 메서드를 사용하여 새 IDeploymentConflict 개체를 만듭니다. 이 개체는 배포 충돌을 나타냅니다. Add 메서드 호출에서 충돌을 해결하기 위해 호출되는 메서드도 지정합니다.

예제

다음 코드 예제에서는 목록 정의 프로젝트 항목의 프로젝트 항목 확장에서 배포 충돌을 처리하기 위한 기본 프로세스를 보여 줍니다. 다른 프로젝트 항목 형식에 대한 배포 충돌을 처리하려면 다른 문자열을 SharePointProjectItemTypeAttribute에 전달합니다. 자세한 내용은 SharePoint 프로젝트 항목 확장을 참조하십시오.

편의상 이 예제의 DeploymentStepStarted 이벤트 처리기에서는 배포 충돌이 있다고 가정하며(즉, 항상 새 IDeploymentConflict 개체를 추가함), Resolve 메서드는 충돌이 해결되었음을 나타내기 위해 간단히 true를 반환합니다. 실제 시나리오의 경우 DeploymentStepStarted 이벤트 처리기는 먼저 현재 프로젝트 항목의 파일과 배포 위치의 파일 간에 충돌이 있는지 여부를 확인한 다음 충돌이 있는 경우에만 IDeploymentConflict 개체를 추가합니다. 예를 들어, 이벤트 처리기에서 e.ProjectItem.Files 속성을 사용하여 프로젝트 항목의 파일을 분석할 수 있으며, SharePoint 명령을 호출하여 배포 위치의 파일을 분석할 수도 있습니다. 마찬가지로 실제 시나리오에서는 Resolve 메서드가 SharePoint 명령을 호출하여 SharePoint 사이트의 충돌을 해결할 수 있습니다. SharePoint 명령을 만드는 방법에 대한 자세한 내용은 방법: 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;
        }
    }
}

코드 컴파일

이 예제에는 다음 어셈블리에 대한 참조가 필요합니다.

  • Microsoft.VisualStudio.SharePoint

  • System.ComponentModel.Composition

확장 배포

확장을 배포하려면 어셈블리 및 확장과 함께 배포할 다른 모든 파일에 대한 VSIX(Visual Studio Extension) 패키지를 만듭니다. 자세한 내용은 Visual Studio에서 SharePoint 도구에 대한 확장 배포를 참조하십시오.

참고 항목

작업

방법: 배포 단계가 진행될 때 코드 실행

기타 리소스

SharePoint 패키징 및 배포 확장

SharePoint 프로젝트 항목 확장

방법: SharePoint 명령 만들기

변경 기록

날짜

변경 내용

이유

2010년 5월

항목이 추가되었습니다.

향상된 기능 관련 정보