2017-12-19 93 views
5

this समाधान में मेरे पास 2 ऐप्स हैं: AppA, AppB जो क्लास लाइब्रेरी Shared साझा करते हैं। मैंने PowerShell और node स्क्रिप्ट्स के साथ समानांतर में इन्हें बनाने/चलाने के लिए स्वचालित प्रयास किया है (मैं अन्य समाधानों के लिए खुला हूं)। मैं दोनों --no-dependencies और --no-restore झंडे का उपयोग कर रहा है, लेकिन बीच-बीच में मैं:समानांतर या साथ में

'CSC : error CS2012: Cannot open \'C:\\Users\\User\\source\\repos\\ParallelBuild\\Shared\\obj\\Debug\\netcoreapp2.0\\Shared.dll\' for writing -- \'The process cannot access the file \'C:\\Users\\User\\source\\repos\\ParallelBuild\\Shared\\obj\\Debug\\netcoreapp2.0\\Shared.dll\' because it is being used by another process.\' [C:\\Users\\User\\source\\repos\\ParallelBuild\\Shared\\Shared.csproj]\r\n' 

PowerShell: ./build.ps1 enter image description here

नोड: रन परियोजना build-script या node ./build-script/app.js enter image description here

Shared प्रोजेक्ट बिल्डिंग --no-dependencies ध्वज के साथ भी क्यों है? मैं समानांतर या एक साथ कैसे बना सकता हूं? त्रुटि CS2012 के लिए

+0

आप निर्माण प्रक्रिया कैसे बुला रहे हैं? अपना कोड पोस्ट करें। – TheIncorrigible1

+0

@ TheIncorriable1 सभी कोड रेपो –

+0

में हैं लिंक को नोटिस नहीं किया, धन्यवाद – TheIncorrigible1

उत्तर

3

स्पष्टीकरण: प्रक्रिया फ़ाइल

मैं आपकी समस्या को पुनः सकता है और Process Monitor उपयोग नहीं कर सकते इंगित करता है कि दोनों प्रक्रियाओं खुला shared.dll पढ़ने के लिए एक ही समय में। यह आपके द्वारा वर्णित मुद्दे की ओर जाता है।

विभिन्न प्रक्रियाओं से एक ही फाइल पढ़ने documentation रूप FileShare.Read का उपयोग कर इंगित करता है (नीचे अंश देखें) के द्वारा किया जा सकता है, ऐसा लगता है कि इस नहींcsc.exe द्वारा किया जाता है। यह csc.exe की कमी है, जो शायद निकट भविष्य में नहीं बदला जाएगा।

पढ़ने के लिए फ़ाइल के बाद के उद्घाटन की अनुमति देता है। यदि यह ध्वज निर्दिष्ट नहीं है, तो पढ़ने के लिए फ़ाइल खोलने का कोई अनुरोध (इस प्रक्रिया द्वारा या अन्य प्रक्रिया) फ़ाइल बंद होने तक विफल हो जाएगी। हालांकि, यदि यह ध्वज निर्दिष्ट है, तो फ़ाइल तक पहुंचने के लिए अतिरिक्त अनुमतियां अभी भी हो सकती हैं।

समाधान

इसके बजाय Start-Process का उपयोग कर समानांतर निर्माण को प्राप्त करने के लिए, आप MSBuild, जो बॉक्स से बाहर इस का समर्थन करता है इस्तेमाल कर सकते हैं की

समांतर बिल्ड /maxcpucount -switch और BuildInParallel -task पैरामीटर के साथ msbuild द्वारा समर्थित है MS build documentation में वर्णित अनुसार।

समानांतर निर्माण कमांडलाइन पर /maxcpucount स्विच का उपयोग करके सक्षम किया गया है:।

डॉटनैट MSBuild \ ParallelBuildAB.csproj/लक्ष्य: निर्माण/बहाल: झूठी /maxcpucount: 2

इसके अलावा परियोजना-फ़ाइल ParallelBuildAB.csproj में BuildInParallel-कार्य पैरामीटर का उपयोग करना भी आवश्यक है।कृपया ध्यान दें कि AppA.csproj और AppB.csproj संदर्भित:

<?xml version="1.0"?> 
<Project name="system" default="build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <Target Name="build"> 
     <MSBuild BuildInParallel="true" Projects="./AppA/AppA.csproj;./AppB/AppB.csproj" Targets="Build"/> 
    </Target> 
</Project> 
+0

तो मुझे समानांतर में 2 परियोजनाओं का निर्माण करने के लिए नई परियोजना 'समानांतर BuildAB.csproj' बनाना है? उन्हें एक ही आदेश से चलाने के लिए भी संभव है? –

संबंधित मुद्दे