Msbuild وunbindig SLN
سؤال
وأريد أن إلغاء توثيق ملف SLN بلدي من خادم TFS ونشرها على SVN هناك أي خيار "سهلة" للقيام بذلك. فإنه من السهل لفتح SLN واختار خيار إلغاء التوثيق في Visual Studio، ولكن لا أحد حاول من أي وقت مضى لأتمتة هذه العملية؟ هناك حل لتعديل ملف SLN باستخدام xmlpoke وحذف المعلومات ملزمة، ولكن هل هو آمن؟
المحلول
ولدي بعض العينات نشرت على معرض رمز 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="<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>
وباختصار، هذا السيناريو نسخ الملفات المصدر إلى دليل مؤقت، ويزيل الارتباطات التحكم المصدر من الحل وملفات المشروع، ثم الكود البريديه منابع وأخيرا حذف الدليل المؤقت.
لا تنتمي إلى StackOverflow