Msbuild 与 SLN 解绑

发布于 2024-08-09 08:48:22 字数 154 浏览 2 评论 0原文

我想从 TFS 服务器取消绑定我的 sln 文件并将其发布到 SVN 上是否有任何“简单”选项可以执行此操作。在 Visual Studio 中打开 sln 并选择取消绑定选项很容易,但是有人尝试过自动化这一过程吗?有一种解决方案可以使用xmlpoke编辑sln文件并删除绑定信息,但是安全吗?

I want to unbind my sln file from TFS server and publish it on SVN is there any "easy" option to do this. It's easy to open sln and chose unbind option in Visual Studio, but does any one ever tried to automate this process? There is a solution to edit sln file using xmlpoke and deleting binding information, but is it safe?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

灰色世界里的红玫瑰 2024-08-16 08:48:22

我在 MSDN 代码库上发布了一些关于 TFS 2010 SDK 的示例,这些示例说明了如何操作使用 MSBuild 和 MSBuild 社区任务。以下是 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="<Scc[A-z]+>.+</Scc[A-z]+>" 
    ReplacementText=" " />
  <ItemGroup>
    <PackageFiles Include="$(PackageDir)**\*.*" />
  </ItemGroup>
  <Zip 
    Files="@(PackageFiles)" 
    WorkingDirectory="$(PackageDir)" 
    ZipFileName="$(SolutionDir)$(SolutionName).zip" />
  <Delete 
    Files="@(PackageFiles)" />
  <RemoveDir 
    Directories="$(PackageDir)" />
</Target>

简而言之,此脚本将源文件复制到临时目录,从解决方案和项目文件中删除源代码管理绑定,然后压缩源文件,最后删除临时目录。

I have some samples published on the MSDN Code Gallery for the TFS 2010 SDK that illustrate how to do this with MSBuild and the MSBuild Community Tasks. Here's a snippet of MSBuild script from the WorkItemObjectModel sample's WorkItemType.csproj file:

<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="<Scc[A-z]+>.+</Scc[A-z]+>" 
    ReplacementText=" " />
  <ItemGroup>
    <PackageFiles Include="$(PackageDir)**\*.*" />
  </ItemGroup>
  <Zip 
    Files="@(PackageFiles)" 
    WorkingDirectory="$(PackageDir)" 
    ZipFileName="$(SolutionDir)$(SolutionName).zip" />
  <Delete 
    Files="@(PackageFiles)" />
  <RemoveDir 
    Directories="$(PackageDir)" />
</Target>

In a nutshell, this script copies the source files to a temporary directory, removes the source control bindings from the solution and project files, then zips up the sources and finally deletes the temporary directory.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文