2009-10-30 78 views
1

我想從TFS服務器解除綁定我的sln文件並在SVN上發佈它是否有任何「簡單」選項來執行此操作。在Visual Studio中打開sln並選擇unbind選項很容易,但是有沒有人嘗試過自動執行此過程?有一種解決方案使用xmlpoke編輯sln文件並刪除綁定信息,但它是否安全?Msbuild和SLN unbindig

回答

1

我在MSDN代碼庫上發佈了TFS 2010 SDK的一些示例,它們說明了如何使用MSBuild和MSBuild Community Tasks來完成此操作。下面是的MSBuild腳本從WorkItemObjectModel樣本的WorkItemType.csproj文件的一個片段:

<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> 

簡而言之,這個腳本會複製源文件到一個臨時目錄,將刪除解決方案和項目文件的源代碼管理綁定,然後壓縮源代碼並最終刪除臨時目錄。