मैं एक MSBuild परियोजना फ़ाइलें जो समानांतर सब मेरी VS2010 समाधान के कॉन्फ़िगरेशन में बनाने की कोशिश में लिखा है:MSBuild: समानांतर बनाता है और नेट परियोजनाओं
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
<ItemGroup>
<BuildFile Include="$(SourceRoot)MyProject.sln" />
<Config Include="Debug">
<Configuration>Debug</Configuration>
</Config>
<Config Include="Release">
<Configuration>Release</Configuration>
</Config>
</ItemGroup>
<Target Name="BuildAll" Outputs="%(Config.Configuration)">
<Message Text="Start building for configuration: %(Config.Configuration)" />
<MSBuild Projects="@(BuildFile)"
Properties="Configuration=%(Config.Configuration)"
Targets="Build" />
</Target>
</Project>
और मैं साथ MSBuild का शुभारंभ:
msbuild /m /p:BuildInParallel=true /t:BuildAll buildall.proj
समस्या यह है कि मेरे समाधान में कई नेट परियोजनाएं हैं जिनमें सभी का एक ही आउटपुट फ़ोल्डर है। ये परियोजनाएं एक ही बाहरी असेंबली का उपयोग करती हैं।
तो अक्सर, दो आउटपुट निष्पादन योग्य एक ही समय में उत्पन्न होते हैं और उनकी निर्भरता एक ही समय में कॉपी की जाती है। इस तरह त्रुटियों की ओर जाता है:
C:\Windows\Microsoft.NET\Framework\v4.0.30319\Microsoft.Common.targets(3001,9):
error MSB3021:
Unable to copy file "xxx\NLog.dll" to "D:\src\Blackbird\shared\bin\debug\NLog.xml". The process
cannot access the file 'xxx\NLog.dll because it is being used by another process.
जो मुझे लगता है कि इसका मतलब है: "2 विभिन्न परियोजनाओं NLog का उपयोग करें और एक ही समय में उत्पादन फ़ोल्डर में अपने विधानसभा नकल करने की कोशिश" ...
वहाँ एक रास्ता है उस के आसपास पाने के लिए? मैं वास्तव में समाधान में सभी परियोजनाओं को संशोधित करने से बचना चाहता हूं।
कार्य स्रोत कोड "सी: \ विंडोज \ माइक्रोसॉफ्ट.NET \ Framework \ v4.0.30319 \ Microsoft.Common.targets (3001,9)" को देखते हुए, मैंने देखा है कि एमएसबिल्ड पुनः प्रयास करना संभव है प्रतिलिपि:
<Copy
SourceFiles="@(ReferenceCopyLocalPaths)"
DestinationFiles="@(ReferenceCopyLocalPaths->'$(OutDir)%(DestinationSubDirectory)%(Filename)%(Extension)')"
SkipUnchangedFiles="$(SkipCopyUnchangedFiles)"
OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
Retries="$(CopyRetryCount)"
RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
UseHardlinksIfPossible="$(CreateHardLinksForCopyLocalIfPossible)"
Condition="'$(UseCommonOutputDirectory)' != 'true'"
>
मैं स्थापित करने के लिए चर CopyRetryCount, CopyRetryDelayMilliseconds कोशिश की है, ... मुझे उम्मीद थी कि अगर प्रति विफल रहता है, एक और प्रतिलिपि में कुछ मिलीसेकेंड बाद में किया सफल हो जाएगा। लेकिन मैं इन पैरामीटर को सेट करने में असमर्थ हूं। मैं उन्हें कैसे बदल सकता हूं?
क्या कोई और समाधान है?
क्या आप अपने उत्पाद के हिस्से के रूप में एनएलओजी बना रहे हैं या क्या यह सिर्फ स्रोत नियंत्रण में चेक किया गया है? यदि आप इसे बना रहे हैं, तो क्या यह संभव है कि आपकी कुछ परियोजनाएं परियोजना के बजाय बाइनरी स्थान का संदर्भ दें? –