2009-10-30 3 views
1

내 sln 파일을 TFS 서버에서 바인딩 해제하고 SVN에 게시하려면이 작업을 수행하기위한 "쉬운"옵션이 필요합니다. Visual Studio에서 sln을 열고 unbind 옵션을 선택하기는 쉽지만이 프로세스를 자동화하려고 시도한 사람이 있습니까? xmlpoke를 사용하여 sln 파일을 편집하고 바인딩 정보를 삭제하는 해결책이 있지만 안전합니까?Msbuild and SLN unbindig

답변

1

에 대한 MSDN 코드 갤러리에 게시 된 샘플 중 MSBuild와 MSBuild Community Tasks을 사용하는 방법을 보여주는 샘플이 있습니다. 여기에 WorkItemObjectModel 샘플의 WorkItemType.csproj 파일에서의 MSBuild 스크립트의 코드 조각입니다 : 간단히 말해서

<Import Project="$(MSBuildExtensionsPath32)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" /> 
<ItemGroup> 
    <SourceFiles 
    Include="$(SolutionDir)**/*.*" 
    Exclude="$(SolutionDir)Package/**/*.*;$(SolutionDir)**/bin/**/*.*;$(SolutionDir)**/obj/**/*.*;$(SolutionDir)**/internal.proj;$(SolutionDir)**/*.*scc;$(SolutionDir)$(SolutionName).zip"> 
    <Visible>False</Visible> 
    </SourceFiles> 
</ItemGroup> 
<Target Name="AfterBuild" Condition="'$(Configuration)'=='Release'" 
     Inputs="@(SourceFiles)" Outputs="$(SolutionDir)$(SolutionName).zip"> 
    <Delete 
    Files="$(SolutionDir)$(SolutionName).zip" 
    Condition="Exists('$(SolutionDir)$(SolutionName).zip')" /> 
    <PropertyGroup> 
    <PackageDir>$(SolutionDir)Package\</PackageDir> 
    </PropertyGroup> 
    <MakeDir 
    Directories="$(PackageDir)" /> 
    <Copy 
    SourceFiles="@(SourceFiles)" 
    DestinationFiles="$(PackageDir)%(RecursiveDir)%(Filename)%(Extension)" /> 
    <Delete 
    Files="$(PackageDir)**/bin/**/*.*;$(PackageDir)**/obj/**/*.*" /> 
    <RemoveDir 
    Directories="$(PackageDir)**/bin;$(PackageDir)**/obj" /> 
    <Attrib 
    Files="@(PackageFiles)" 
    ReadOnly="false" /> 
    <FileUpdate 
    Files="$(PackageDir)$(SolutionFileName)" 
    IgnoreCase="true" 
    Regex="^\s+GlobalSection\(TeamFoundationVersionControl\).+\n(\s*Scc.*\n)+\s+EndGlobalSection" 
    ReplacementText=" " 
    Multiline="true" 
    Singleline="false" /> 
    <ItemGroup> 
    <ProjectFiles Include="$(PackageDir)**/*.*proj" /> 
    </ItemGroup> 
    <FileUpdate 
    Files="@(ProjectFiles)" 
    Regex="&lt;Scc[A-z]+&gt;.+&lt;/Scc[A-z]+&gt;" 
    ReplacementText=" " /> 
    <ItemGroup> 
    <PackageFiles Include="$(PackageDir)**\*.*" /> 
    </ItemGroup> 
    <Zip 
    Files="@(PackageFiles)" 
    WorkingDirectory="$(PackageDir)" 
    ZipFileName="$(SolutionDir)$(SolutionName).zip" /> 
    <Delete 
    Files="@(PackageFiles)" /> 
    <RemoveDir 
    Directories="$(PackageDir)" /> 
</Target> 

는이 스크립트를 복사 임시 디렉토리에 소스 파일, 다음, 솔루션 및 프로젝트 파일에서 소스 제어 바인딩을 제거 소스를 압축하고 최종적으로 임시 디렉토리를 삭제합니다.