Msbuild et SLN non liés
Question
Je souhaite dissocier mon fichier sln du serveur TFS et le publier sur un serveur SVN. Existe-t-il des options "easy"? possibilité de le faire. Il est facile d'ouvrir sln et de choisir l'option unbind dans Visual Studio, mais est-ce que quelqu'un a déjà essayé d'automatiser ce processus? Il existe une solution pour éditer le fichier sln en utilisant xmlpoke et en supprimant les informations de liaison, mais est-ce sûr?
La solution
J'ai quelques exemples publiés sur la bibliothèque de codes MSDN pour le SDK TFS 2010 qui illustrent comment procéder avec MSBuild et les tâches de la communauté MSBuild . Voici un extrait du script MSBuild du fichier WorkItemType.csproj de l'exemple 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="<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>
En un mot, ce script copie les fichiers source dans un répertoire temporaire, supprime les liaisons de contrôle de source des fichiers de solution et de projet, puis compresse les sources et enfin supprime le répertoire temporaire.