2009-10-30 5 views
1

Je veux dissocier mon fichier sln du serveur TFS et le publier sur SVN est-il une option "facile" pour faire cela. 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écuritaire?Msbuild et SLN unbindig

Répondre

1

J'ai quelques exemples publiés sur la galerie de code MSDN pour le TFS 2010 SDK qui illustrent comment faire cela avec MSBuild et le MSBuild Community Tasks. Voici un extrait de scripts MSBuild à partir du fichier WorkItemType.csproj de l'échantillon 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> 

En un mot, ce script copie les fichiers source dans un répertoire temporaire, supprime les liaisons de contrôle de code source de la solution et les fichiers projet, puis zippe les sources et supprime finalement le répertoire temporaire.