2009-10-30 39 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> 

简而言之,这个脚本会复制源文件到一个临时目录,将删除解决方案和项目文件的源代码管理绑定,然后压缩源代码并最终删除临时目录。