मेरे पास एक ही समस्या थी लेकिन काम करने के लिए स्रोत पेड़ के बाहर चीजों को संशोधित नहीं करना चाहता था। C: \ Program Files में फ़ाइलों को जोड़ना ... का अर्थ है कि आपको समान व्यवहार प्राप्त करने के लिए प्रत्येक देव मशीन पर इसे मैन्युअल रूप से करना होगा।
1) एक कस्टम लक्ष्य फाइल बनाई जो मैं प्रत्येक proj फ़ाइल में निम्न जोड़कर मेरी समाधान में हर सी # और/या वीबी/एफ # परियोजना में आयात:
<!-- Rest of project file -->
<PropertyGroup Condition="'$(SolutionDir)' == '' or '$(SolutionDir)' == '*undefined*'">
<!-- Relative path to containing solution folder -->
<SolutionDir>..\</SolutionDir>
</PropertyGroup>
<Import Project="$(SolutionDir)CommonSettings.targets" />
मैं तीन बातें किया
2) एक स्वच्छ लक्ष्य जो वास्तविक स्वच्छ के बाद बुलाया जाता है (का उपयोग कर AfterTargets MSBuild 4.0 से विशेषता) जोड़ा गया:
<Target Name="CleanCs" AfterTargets="Clean">
<Message Text="Deep cleaning C# project..." />
<CreateItem Include="$(OutDir)**\*.*; $(ProjectDir)\obj\**\*.*; $(IntermediateOutputPath)**\*.*"
Exclude="**\bin\**\*.vshost.exe; $(IntermediateOutputPath)**\*.log">
<Output TaskParameter="Include" ItemName="AfterClean_FilesToDelete"/>
</CreateItem>
<Delete Files="@(AfterClean_FilesToDelete)" />
<CreateItem Include="$(ProjectDir)\obj\" >
<Output TaskParameter="Include" ItemName="AfterClean_DirectoriesToDelete" />
</CreateItem>
<CreateItem Include ="$(ProjectDir)\bin\" Condition="'$(TargetExt)' != '.exe'" >
<Output TaskParameter="Include" ItemName="AfterClean_DirectoriesToDelete"/>
</CreateItem>
<RemoveDir ContinueOnError="true" Directories="@(AfterClean_DirectoriesToDelete)" />
</Target>
3) मेरी निरंतर एकीकरण MSBuild परियोजना में मैं जांचें और सुनिश्चित करें कि सभी प्रोज फाइलों में # 1:
<ItemGroup>
<!-- Exclude viewer acceptance tests as they must compile as x86 -->
<CheckProjects_CsProjects Include="**\*.csproj" />
</ItemGroup>
<Target Name="CheckProjects">
<!--
Look for C# projects that don't import CommonSettingsCs.targets
-->
<XmlRead XPath="//n:Project[count(n:Import[@Project[contains(string(), 'CommonSettingsCs.targets')]]) = 0]/n:PropertyGroup/n:AssemblyName/text() "
XmlFileName="%(CheckProjects_CsProjects.Identity)"
Namespace="http://schemas.microsoft.com/developer/msbuild/2003"
Prefix="n" >
<Output TaskParameter="Value" ItemName="CheckProjects_CsMissingImports"/>
</XmlRead>
<Error Text="Project missing CommonSettingsCs.targets: %(CheckProjects_CsMissingImports.Identity)"
Condition="'%(CheckProjects_CsMissingImports.Identity)' != ''" />
</Target>
यह डेवलपर्स को # 1 जोड़ने से रोकने से रोकता है। आप यह सुनिश्चित करने के लिए अपना खुद का प्रोजेक्ट टेम्पलेट बना सकते हैं कि अल नई परियोजनाओं में यह डिफ़ॉल्ट रूप से है।
इस दृष्टिकोण का लाभ एक नया स्रोत वृक्ष प्रविष्टि स्थापित करने में वर्तमान स्रोत पेड़ प्राप्त करने से कुछ भी शामिल नहीं है। नकारात्मकता यह है कि जब आप उन्हें बनाते हैं तो आपको प्रोजेक्ट फ़ाइलों को एक बार संपादित करना होगा।
स्रोत
2010-08-07 19:24:10
ठीक है मुझे मिल गया। मैं इस अस्थायी प्रोजेक्ट फ़ाइल में गया और इसमें बिल्ड, क्लीन, पुनर्निर्माण और प्रकाशित करें। Common.targets.files से कोई आयात नहीं। बहुत बुरा, मुझे एक और समाधान मिलना होगा। –
यह किसी भी विजुअल स्टूडियो बिल्ड पर लागू नहीं होता है, है ना? – Maslow