Msbuild и SLN отменяют привязку - PullRequest
1 голос
/ 30 октября 2009

Я хочу отсоединить мой файл sln от TFS-сервера и опубликовать его в SVN, есть ли какой-нибудь «простой» способ сделать это. Легко открыть sln и выбрать опцию unbind в Visual Studio, но пытался ли кто-нибудь когда-нибудь автоматизировать этот процесс? Существует решение для редактирования файла sln с использованием xmlpoke и удаления информации о привязке, но безопасно ли это?

1 Ответ

1 голос
/ 03 ноября 2009

У меня есть несколько примеров, опубликованных в галерее кодов MSDN для TFS 2010 SDK , которые иллюстрируют, как это сделать с MSBuild и Задачи сообщества MSBuild . Вот фрагмент сценария MSBuild из файла WorkItemType.csproj образца WorkItemObjectModel:

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

Короче говоря, этот сценарий копирует исходные файлы во временный каталог, удаляет привязки управления исходным кодом из файлов решения и проекта, затем архивирует исходные файлы и, наконец, удаляет временный каталог.

...