पथ का एक भाग नहीं मिल सका ... बिन \ roslyn \ csc.exe


811

मैं TFS स्रोत नियंत्रण से प्राप्त Asp.net MVC परियोजना को चलाने की कोशिश कर रहा हूं। मैंने सभी विधानसभा संदर्भ जोड़े हैं और मैं बिना किसी त्रुटि या चेतावनी के सफलतापूर्वक निर्माण और संकलन करने में सक्षम हूं।

लेकिन मुझे ब्राउज़र में निम्न त्रुटि मिलती है:

पथ का एक भाग नहीं ढूँढ सका 'C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe'।

यहाँ पर एरर पेज का फुल स्क्रीनशॉट है।

यहां छवि विवरण दर्ज करें

कुछ दिनों के शोध के बाद, मैं समझ गया कि रोज़लिन .Net कंपाइलर प्लेटफ़ॉर्म है जो अग्रिम संकलन सुविधाएँ प्रदान करता है। हालाँकि, मुझे समझ नहीं आ रहा है कि मेरा निर्माण क्यों \ बिन \ roslyn \ csc.exe खोजने की कोशिश कर रहा है, क्योंकि मैंने रोजलिन से संबंधित कुछ भी कॉन्फ़िगर नहीं किया है और न ही मैं अपने प्रोजेक्ट में रोजलिन का उपयोग करने का इरादा रखता हूं।


10
किसी को भी समझा सकते हैं कि संकलित ASP.NET एप्लिकेशन को चलाने के हिस्से के रूप में यह क्यों आवश्यक है? यह csc.exe किसके लिए उपयोग कर रहा है?
ग्रिग्मैक

1
मुझे लगता है कि यह रसियन भागीदारी की व्याख्या करता है: blogs.msdn.microsoft.com/webdev/2014/05/12/…
andy250

4
रोसलिन फ़ोल्डर को बिन फ़ोल्डर में कॉपी नहीं किया जा रहा था, मैंने इसे नीचे इंस्टॉल-पैकेज Microsoft को स्थापित करके तय किया था। कोडकोड। पोरपॉइडर्स।डॉटनेटकॉमपेलरप्लेट रिकॉर्डर
अब्दुल्लाह तहान

12
Microsoft.CodeDom.Providers.otNetCompilerPlatform की स्थापना ने मेरा मुद्दा हल कर दिया।
सुरेनसलुका

4
मैं अपने प्रोजेक्ट को वीएस 2019 में खोलने के बाद ऐसा कर रहा था। यह पहले वीएस 2017 पर काम करता था। मैंने पाया कि बस Microsoft.CodeDom.Providers.DotNetCompilerPlatform को किसी भी पिछले संस्करण में अपग्रेड करने के बाद वापस नवीनतम संस्करण में समस्या हल हो गई। इसने मेरी .csprojफ़ाइल में कुछ समस्याएँ ठीक कीं ।
नियो

जवाबों:


435

डिफ़ॉल्ट VS2015 टेम्प्लेट के साथ समस्या यह है कि कंपाइलर वास्तव में tfr \ bin \ roslyn \ डायरेक्टरी में कॉपी नहीं किया गया है, बल्कि {outirir} \ roslyn \ डायरेक्टरी

इस कोड को अपनी .csproj फ़ाइल में जोड़ें:

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
    <ItemGroup>
      <RoslynFiles Include="$(CscToolPath)\*" />
    </ItemGroup>
    <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
    <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

9
इससे मेरा मसला हल नहीं होता। अब मुझे 'फाइल नहीं मिल रही' 'C: \ B8akWorkspace \ B8akProject \ B8akSolution \ B8AK.Portal \ bin \ roslyn \ csc.exe' । कृपया ध्यान दें कि जब मैं VS2015 में एक नया MVC प्रोजेक्ट बनाता हूं, तो मुझे .csproj में उल्लिखित कॉन्फ़िगरेशन नहीं दिखता है और यह ब्राउज़र में पूरी तरह से ठीक चलता है
Eyad

4
धन्यवाद। रोसलिन निर्देशिका को डाउनलोड करने और / बिन फ़ोल्डर में रखने के बाद मैं अब ब्राउज़र में प्रोजेक्ट को बनाने और चलाने में सक्षम हूं। मैंने ऊपर उल्लेखित PstBuildEvent नहीं डाला था और यह अभी भी काम करता है। हो सकता है कि आप ऊपर दिए गए अपने उत्तर को संपादित करना चाहते हों और रोजलिन फाइलों को रखने और समाधान को बेहतर ढंग से दर्शाने की आवश्यकता हो।
Eyad

2
खैर, एक सामान्य स्थिति में; आपके पास अपने $ (OutDir) roslyn *। * फ़ोल्डर के अंदर कंपाइलर होना चाहिए, इसलिए यह स्क्रिप्ट कंपाइलर को आपके प्रोजेक्ट के बिनफ़ोल्डर में कॉपी कर देगा। जाहिरा तौर पर vs2015 की आपकी स्थापना में संकलक शामिल नहीं था।
मिशेल

9
मुझे Microsoft.CodeDom.Providers.otNetCompilerPlatform 1.0.8 और Microsoft.Net.Compilers 2.6.1 अपडेट करने में बहुत मदद मिली। मुझे इस अतिरिक्त लक्ष्य को जोड़ने की आवश्यकता नहीं थी। ऐसा ही कुछ देखने के लिए टूलिंग के बाद के संस्करण में जोड़ा गया था: github.com/aspnet/RoslynCodeDomProvider/commit/…
Ian Robertson

5
मैंने Nuget से 2.10.0 संस्करण के लिए Microsoft.Net.Compilers के संस्करण को अपडेट किया है और यह मेरे लिए समाधान है। मैं targetFramework = "4.6.2" का उपयोग कर रहा हूं
juanytuweb

1160

टी एल; डॉ

पैकेज मैनेजर कंसोल में इसे चलाएं:

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

अधिक जानकारी

यह समस्या स्वयं Visual Studio से संबंधित नहीं है, इसलिए फ़ाइलों पर प्रतिलिपि बनाने के लिए बिल्ड चरणों को जोड़ने का सुझाव देने वाले उत्तर बल्कि एक समाधान हैं। कंपाइलर बायनेरिज़ को मैन्युअल रूप से प्रोजेक्ट में जोड़ने के साथ ही।

रोसलिन संकलक एक NuGet पैकेज से आता है और उस पैकेज के कुछ संस्करणों में एक बग था / (मैं वास्तव में उन लोगों को नहीं जानता)। समाधान उस पैकेज को बग-मुक्त संस्करण में पुनर्स्थापित / अपग्रेड करना है। मूल रूप से 2015 में जवाब वापस लिखने से पहले मैंने इसे विशिष्ट संस्करणों पर निम्नलिखित पैकेज स्थापित करके तय किया:

  • Microsoft.Net.Compilers 1.1.1
  • Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.1

तब मैंने .csproj में देखा और यह सुनिश्चित किया कि संकुल के पथ सही हैं (मेरे मामले में .. \ / संकुल \ *। *) <ImportProject>शीर्ष पर टैग के अंदर और <Target>नीचे "" EnsureNuGetPackageBuildIports "" नाम के साथ। यह MVC 5 और .NET फ्रेमवर्क 4.5.2 पर है।


11
यह मेरी समस्या थी - बिन / रोसलिन फ़ोल्डर वहाँ है जब एक परियोजना बनाई जाती है, हालांकि, यदि आप इसे हटाते हैं या, स्रोत नियंत्रण की तरह, इसे कॉपी नहीं किया जाता है, तो इसका पुनर्निर्माण नहीं होता है। मुझे लगता है कि संस्करणों के साथ एक "सिंक" समस्या का एक सा है, एक बार 1.0.1 स्थापित है और सही संस्करण के लिए proj फ़ाइल में आयात को अद्यतन करें, एक निर्माण तब स्वचालित रूप से रोसलिन फ़ोल्डर की प्रतिलिपि बना देगा - उन पोस्ट में से किसी की आवश्यकता नहीं है आदेश बनाएँ।
जेस्टर

16
मुझे पूरा यकीन है कि यह सबसे अच्छा समाधान है ... अपडेट-पैकेज -reinstall
-projectname

5
यह सब करने के बाद, मेरे प्रोजेक्ट के लिए कुछ भी नहीं बदला। बिन फ़ोल्डर अभी भी चपटा है।
ब्रायनरी

8
एक नोट: Microsoft.CodeDom.Providers.otNetCompilerPlatform Nuget पैकेज का संस्करण 1.0.3 मेरे लिए काम करता है, लेकिन संस्करण 1.0.6 इस प्रश्न में त्रुटि का कारण बनता है।
डैनियल नील

5
1.0.6 में एक बग है: github.com/aspnet/RoslynCodeDomProvider/issues/13
akatakritos

176

आपका बिल्ड ढूंढने की कोशिश कर रहा है \bin\roslyn\csc.exeक्योंकि आपके प्रोजेक्ट में निम्नलिखित पैकेज जोड़े गए हैं। बस अपनी packages.configफ़ाइल की समीक्षा करें , आप दोनों को वहां ले जा सकते हैं

Microsoft.CodeDom.Providers.DotNetCompilerPlatform
Microsoft.Net.Compilers

रोसलिन क्या है और किसने उन्हें (पैकेज) प्रोजेक्ट में जोड़ा है: यदि आप वी.एस.2015 का उपयोग कर प्रोजेक्ट बनाने के लिए .net फ्रेमवर्क 4.5.2 का उपयोग कर रहे हैं, तो आपने देखा होगा कि प्रोजेक्ट टेम्प्लेट डिफ़ॉल्ट रूप से रोसलिन का उपयोग करते हैं। दरअसल रोजलिन Microsoft से .NET भाषाओं के लिए ओपन-सोर्स कंपाइलर में से एक है।

हमें रोसलिन को क्यों हटाना चाहिए: यदि आपकी परियोजना में रोसलिन संदर्भ हैं और आप इसे बिना सर्वर के तैनात करने के इच्छुक हैं, तो आपको वेबसाइट पर अवांछित त्रुटियां मिलेंगी क्योंकि कई होस्टिंग प्रदाताओं ने अभी भी अपने सर्वर को अपग्रेड नहीं किया है और इसलिए रोसलिन का समर्थन नहीं करते हैं। इस समस्या को हल करने के लिए, आपको प्रोजेक्ट टेम्पलेट से रोज़लिन कंपाइलर को निकालना होगा।

यदि आप रोजलिन का उपयोग करने में रुचि नहीं रखते हैं, तो इसे हटाने के लिए चरण bellow का पालन करें

1। NuGet पैकेज निकालें, Nuget पैकेज कंसोल से निम्न कमांड का उपयोग करें

PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers

2. ऐसा करने के बाद, आपकी web.config फ़ाइल ऑटो-अपडेट होनी चाहिए। यदि ऐसा नहीं है, web.configतो फ़ाइल में नीचे दिए गए कोड की तलाश करें और यदि यह पाया जाता है, तो कोड के इस टुकड़े को हटा दें।

<system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701"></compiler>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"></compiler>
    </compilers>
</system.codedom>

28
यह वास्तव में एक समाधान नहीं है यदि आप वास्तव में नए संकलक और नई सुविधाओं का उपयोग करना चाहते हैं
मत्ती विर्ककुनेन

14
आप भविष्य के खिलाफ वकालत कर रहे हैं।
cchamberlain

2
@cchamberlain यह भविष्य क्यों है? मुझे लगता है कि इसका उपयोग करने के लिए दृढ़ होना चाहिए, लेकिन ऐसा लगता है कि बहुत से लोग इससे परेशान हैं।
एलिसन

1
@ अलीसन - रोजलिन वह दिशा है जिसमें चीजें जा रही हैं। इसमें नई भाषा की विशेषताएं हैं, अधिक प्रदर्शन करने वाला, क्रॉस-प्लेटफॉर्म और खुला स्रोत है। यह अन्य साधनों के बाद सामने आया - इसलिए भविष्य। कुछ भी नहीं कहता है कि आपको इसका उपयोग करने की आवश्यकता है, अधिकांश उन्नयन कुछ लागत को बढ़ाते हैं। देखें "ASP.NET में रोसलिन संकलन क्यों?" अनुभाग: blogs.msdn.microsoft.com/webdev/2014/05/12/…
cchamberlain

1
यदि आप MVC प्रोजेक्ट को GoDaddy पर साझा करना चाहते हैं, तो वह होस्टिंग होस्टिंग है, इसका उत्तर है। GoDaddy csc.exe
जेसन मार्तजया

140

एक साफ और पुनर्निर्माण मेरे लिए काम किया!


4
मुझे नहीं लगता कि सफाई की आवश्यकता है। इस मुद्दे की चर्चा के अनुसार एक पुनर्निर्माण नहीं एक नियमित निर्माण हमेशा रोसलिन फ़ाइल को वापस रख देगा। github.com/dotnet/roslyn/issues/15556
leemicw

मैं भी सिर्फ बिल्ड> पुनर्निर्माण समाधान भागा और त्रुटि दूर हो गई।
मैट मेरिल

मेरे लिए फिर से बनाया गया, मैंने इसे आउटपुट में देखाCopying file from "C:\Users\medmondson\Source\UK\Portal\Branches\v12\Source\packages\Microsoft.Net.Compilers.1.3.2\tools\csi.exe" to "bin\Debug\roslyn\csi.exe".
m.edmondson

12
बस पुनर्निर्माण मेरे लिए काम नहीं किया .. के बाद साफ + पुनर्निर्माण त्रुटि गायब हो गया।
ब्रूनो मिकलिन

2
DotNetCompilerPlatform 1.0.3, Microsoft.Net.Compilers 1.3.2, वीएस प्रो 2017 15.9.4 यहां। विज़ुअल स्टूडियो को पुनरारंभ करने से पहले और बाद में भी मेरे लिए एक साफ / पुनर्निर्माण काम नहीं किया। अंत में, एक बिल्ड> बैच बिल्ड ...> पुनर्निर्माण सभी ने चाल चली। यह देखने के लिए वीएस को पाने के लिए सिर्फ सही मीठा-कुछ भी नहीं फुसफुसा रहा होगा, यह आउटपुट में बिन / रसलिन निर्देशिका को याद कर रहा था।
जोहान

59

यहाँ ऐसा करने का एक अधिक MSBuild तरीका है।

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" Condition="!$(Disable_CopyWebApplication) And '$(OutDir)' != '$(OutputPath)'">
    <ItemGroup>
      <RoslynFiles Include="$(CscToolPath)\*" />
    </ItemGroup>
    <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
    <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

लेकिन मुझे लगता है कि रोसलिन फाइलें मेरी बिन निर्देशिका (एक फ़ोल्डर में नहीं) में भी हैं। एप्लिकेशन को काम करने लगता है, हालांकि।


4
आप इसे अपनी .csproj फ़ाइल में कहीं भी रख सकते हैं, दूसरे <लक्ष्य> टैग के समान स्तर पर। मैंने आमतौर पर इसे नीचे की ओर रखा।
रोब तोप

यह वास्तव में स्वीकृत उत्तर होना चाहिए। आप इसे स्रोत में और अगले खराब schmuck की जांच कर सकते हैं जो आपके रेपो को खींचता है, उसी समस्या से नहीं गुजरना पड़ेगा।
एंड्रयू क्लियर

37

जैसा कि गिटहब पर रोसलिन परियोजना में एक मुद्दे पर उल्लेख किया गया है , एक समाधान (जो मेरे लिए काम किया गया है) केवल दृश्य स्टूडियो में परियोजना को अनलोड और पुनः लोड करना है।

"बिन \ roslyn" फ़ोल्डर बिल्ड या पुनर्निर्माण पर तब तक नहीं बनाया गया था जब तक कि मैंने परियोजना को पुनः लोड नहीं किया।


धन्यवाद, इसने मेरे लिए काम किया। डॉटनेट रिपॉजिटरी पर मुद्दा 2016 में खुला था और विजुअल स्टूडियो 2019 में अभी भी हमारे पास यह मुद्दा है। मुझे विश्वास नहीं हो रहा है कि यह वास्तविक है!
फेलिप ओरियानी

26

मैंने इन चरणों का पालन किया और इसने पूरी तरह से काम किया

  • सभी बिन और obj फ़ोल्डरों को हटा दें
  • स्वच्छ समाधान और पुनर्निर्माण
  • इस कमांड को पावरशेल में चलाएं

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r


22

सभी सिगार को बिना किसी सिगार के आज़माने के बाद, मैंने इस नगेट पैकेज को विज़ुअल स्टूडियो में अपडेट करके तय किया:

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

मेरा संदर्भ के लिए 1.0.0 से 2.0.0 तक था (अब कोई त्रुटि नहीं दिखाता)


3
यह मेरे लिए स्वागत के रूप में था। मेरी परियोजना के लिए भी 2.0.0 बहुत कम था, इसने 2.0.1 की मांग की।
यमन

3
इससे मेरे लिए हल हो गया। मैंने डाउनग्रेड किया जो कि इस मुद्दे को तय कर चुका है और फिर मैंने नवीनतम में वापस अपडेट किया।
डैनियल जैक्सन

1
मैंने भी यही किया। अब roslynफ़ोल्डर मेरे आउटपुट पथ में बनाया गया है। मैं अपने csproj में कोई "roslyn" संदर्भ भी नहीं देखता हूं। यह हो सकता है कि Target Name="CopyRoslyn...एक VS2015 बात है और 2017 के मेरे पास (संस्करण में) आवश्यक नहीं है। ध्यान देने योग्य बात: जब से मैंने एक प्रतिलिपि लक्ष्य को जोड़ने के साथ (एक जिसका मैंने उल्लेख किया है) के साथ खेलने से पहले मैंने DotnetCompilerPlatform अद्यतन किया, मेरे पास एक क्लीनर csproj है।
लॉसमनोस

1
यह सिर्फ मेरे साथ हुआ। यह पद एक जीवन रक्षक है। मेरे पास एक ही त्रुटि संदेश बार-बार है और यह हमेशा एक पूरी तरह से अलग कारण लगता है!
ब्रायन नोब्लुक

19
  1. स्वच्छ समाधान
  2. समाधान का पुनर्निर्माण, इन दो चरणों ने मेरे लिए काम किया।

धन्यवाद, इसने मेरे लिए भी काम किया।
जोए फिलिप्स

1
काम करता है। Ctrl Cजब मैं एक शाखा की जाँच के बीच में था तब मैंने गलती से दबा दिया gitऔर इसने मेरे रेपो को खराब कर दिया। git reset --hardकाम नहीं किया, इसलिए मुझे git clean -xdfऔर परियोजना का पुनर्निर्माण करना पड़ा। हालाँकि मैं इस त्रुटि में भाग गया था, इसलिए मैंने बस प्रोजेक्ट को फिर से साफ किया और फिर से बनाया और यह मेरे लिए काम कर गया।
पॉल कार्लटन

15

NuGet पैकेज मैनेजर

आपको Microsoft.CodeDom.Providers.otNetCompilerPlatform.BinFix स्थापित करने की आवश्यकता है, विशेष रूप से उस त्रुटि के कारण बनाया गया था


यह काम नहीं किया - मुझे संदेह है कि पैकेज वास्तव में इस सटीक उद्देश्य के लिए नहीं है।
ड्रू मिलर

मैंने वीएस 2017 के साथ परीक्षण किया और यह ठीक काम करता है, यह अन्य संस्करणों के साथ एक मुद्दा हो सकता है।
जुआन अकोस्टा

11
मैं 'dsx' उपनाम वाले यादृच्छिक व्यक्ति से यादृच्छिक पैकेज स्थापित नहीं कर रहा हूँ। वह बड़ी सिक्योरिटी नं ...
Mateusz

1
@ मेटसुज या एक जो मेरे non-APS.NET [sic] फ़ोल्डर संरचना को ठीक करेगा
एलियासर

14
  • अपने प्रोजेक्ट पर राइट क्लिक करें और मैनेज नगेट पैकेज चुनें
  • "Microsoft.CodeDom.Providers.DotNetCompilerPlatform खोजें"
  • बस पुराने या नए संस्करण में अपडेट करें (इससे कोई फर्क नहीं पड़ता), और फिर अपने मूल संस्करण में फिर से अपडेट करें।

यह पैकेज की सभी निर्भरता और फ़ाइलों को पुनः स्थापित करता है (जैसे csc.exe)

Nuget - DotNetCompilerPlatform


यह मेरे लिए यह तय! धन्यवाद!
मेसन

11

तो, रॉबॉन के जवाब ने अनिवार्य रूप से मेरे लिए काम किया, लेकिन मुझे मुट्ठी भर विकल्प चुनने पड़े। विशेष रूप से, मुझे लक्ष्य पर शर्त को हटाना था, साथ ही शामिल विशेषता को बदलना था, क्योंकि जब हमारे बिल्ड सर्वर पर प्रोजेक्ट बनाया जा रहा था, तब $ CscToolPath खाली था। उत्सुकता से, स्थानीय रूप से चलने पर $ CscToolPath खाली नहीं था।

<Target Name="CopyRoslynFiles" AfterTargets="AfterBuild" >
  <ItemGroup>
    <RoslynFiles Include="$(SolutionDir)packages\Microsoft.Net.Compilers.1.1.1\tools\*" />
  </ItemGroup>
  <MakeDir Directories="$(WebProjectOutputDir)\bin\roslyn" />
  <Copy SourceFiles="@(RoslynFiles)" DestinationFolder="$(WebProjectOutputDir)\bin\roslyn" SkipUnchangedFiles="true" Retries="$(CopyRetryCount)" RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)" />
</Target>

1
व्यवहार और भी बुरा है। स्थानीय रूप से, यदि आप अपने पैकेज फ़ोल्डर में जाते हैं और दो फ़ोल्डरों को हटाते हैं Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.nn और आप कोड का निर्माण करते हैं, तो $ CscToolPath खाली हो जाएगा। यदि आप दूसरी बार निर्माण करते हैं, तो यह खाली नहीं होगा। समस्या आपके बिल्ड सर्वर पर हर समय होती है, क्योंकि इसे हमेशा "पहला निर्माण" माना जाता है। आपका कोड पूरी तरह से काम करता है, लेकिन यदि आप Microsoft.Net.Compilers पैकेज को अपडेट करते हैं, तो आपको .csproj को अपडेट करना होगा । धन्यवाद।
जुलिएन डी।

3
ध्यान दें कि यदि Microsoft.Net.Compilers का संस्करण बदलता है तो यह समाधान विफल हो जाएगा (या समायोजित करना होगा)।
JanDotNet

मैंने Microsoft.CodeDom.Providers.DotNetCompilerPlatform को अपग्रेड किया और फिर आगे बढ़ने में सक्षम था।
Iowatiger08

10

मेरे लिए काम करने वाले नौगेट पैकेजों को अद्यतन करना समाधान पर राइट क्लिक करें> समाधान के लिए NuGet संकुल प्रबंधित करें और सभी पैकेजों और विशेष रूप से अपडेट करें: Microsoft.Net.Compilers और Microsoft.CodeDom.Providers.DotNetCompilerPlatform


इस बार मेरे लिए काम किया। लापता रोसलिन / csc.exe त्रुटि मेरे लिए लगातार आती है और समाधान अक्सर अलग होता है ...
ब्रायन नोब्लुच

10

यह Microsoft.CodeDom.Providers.DotNetCompilerPlatform 1.0.6 के साथ एक ज्ञात समस्या है । अपग्रेड करने के लिए 1.0.5 ने मेरे लिए यह तय किया।


यह सही है। मैं केवल 1.0.6 संस्करण के साथ इस मुद्दे पर भाग गया जब Azure में प्रकाशित किया गया। 1.0.5 काम के लिए अपग्रेड
अगस्तो बैरेटो

2.0.0 से 1.0.5 तक डाउनग्रेड किया गया और इसने काम किया। हालाँकि, मैं उस समय एक टर्की सैंडविच खा रहा था जो शायद समाधान के लिए आंशिक रूप से जिम्मेदार था। जाओ पता लगाओ।
बार्नीमेक

10

वीएस 2019 के लिए निम्नलिखित नोड को पूरी तरह से हटा दें:

<system.codedom>
</system.codedom>

9

ऊपर डैनियल नील द्वारा एक टिप्पणी के अनुसार:

संस्करण 1.0.3 Microsoft.CodeDom.Providers.DotNetCompilerPlatform Nuget पैकेज मेरे लिए काम करता है, लेकिन संस्करण 1.0.6 इस प्रश्न में त्रुटि का कारण बनता है

1.0.3 पर अपग्रेड करने से मेरे लिए यह समस्या हल हो गई।


3
1.0.6 में एक बग है: github.com/aspnet/RoslynCodeDomProvider/issues/13
akatakritos

@ काकातक्रिटोस ने इसकी मदद की। मैं घंटों खोज रहा था। तुम दोनों को धन्यवाद।
एरिनसेरॉल

2
1.0.7 अभी भी कुछ परिदृश्यों में प्रभावित है github.com/aspnet/RoslynCodeDomProvider/issues/17
altso

1
1.0.5 सबसे हाल का संस्करण है जिसने मेरे लिए काम किया (1.0.6 और 1.0.7 त्रुटि पैदा कर रहे हैं)
पैट्रिक

वही, मैं 1.0.7 था और यह काम नहीं करेगा। 1.0.3 काम करता है। मैंने कुछ भी उच्च करने की कोशिश नहीं की है क्योंकि मैंने इस मुद्दे के साथ अपने जीवन के आखिरी घंटे को बर्बाद कर दिया है और मैं इसके साथ खिलवाड़ नहीं कर रहा हूं और अब यह काम कर रहा है!
फिलिप स्ट्रैटफ़ोर्ड

9

मेरे मामले में जेनकिन्स में मेरे पास समस्या है जब उसने निम्नलिखित त्रुटि के साथ ऑक्टोपस में इसे तैनात करने की कोशिश की:

MSBUILD : OctoPack error OCT-1676060969: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969: System.Exception: Failed to build the path for '\bin\roslyn\csc.exe' relative to 'T:\workspace\machine.engine\Machine.engine.Test': Invalid URI: The format of the URI could not be determined.. See the inner exception for more details. ---> System.UriFormatException: Invalid URI: The format of the URI could not be determined. [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri.CreateThis(String uri, Boolean dontEscape, UriKind uriKind) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at System.Uri..ctor(String uriString) [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 211 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    --- End of inner exception stack trace --- [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.Util.OctopusPhysicalFileSystem.GetPathRelativeTo(String fullPath, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\Util\OctopusPhysicalFileSystem.cs:line 224 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.AddFiles(XContainer nuSpec, IEnumerable`1 sourceFiles, String sourceBaseDirectory, String targetDirectory, String relativeTo) in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 443 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
MSBUILD : OctoPack error OCT-1676060969:    at OctoPack.Tasks.CreateOctoPackPackage.Execute() in Z:\buildAgent\workDir\20ba9f2e0d5e4022\source\OctoPack.Tasks\CreateOctoPackPackage.cs:line 190 [T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj]
Done Building Project "T:\workspace\machine.engine\Machine.engine.Test\Machine.engine.Test.csproj" (default targets) -- FAILED

कारण

कुछ समय बिताने के बाद, मैं एक आंतरिक विकसित घटक का उपयोग कर रहा था जो उपयोग कर रहा था Microsoft.Net.CompilersMicrosoft.Net.Compilersइस समस्या को दूर करने के लिए आंतरिक घटक का उपयोग करने का कारण ( सी #: अमान्य अभिव्यक्ति संकलन फेंकना ) था और इसे इस तरह से हल किया गया था ( विजुअल स्टूडियो 2015 के साथ C # 7 का उपयोग कैसे करें? )। इसका परिणाम यह हुआ, जब मैंने घटक को मुख्य कार्यक्रम में स्थापित किया, तो Microsoft.Net.Compilersइसे अपने आप जोड़ा गया।

समाधान

मेरे काम के आसपास था, हमारे आंतरिक घटक से निम्नलिखित की स्थापना रद्द करें (@malikKhalil उत्तर के बाद)

PM> Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
PM> Uninstall-package Microsoft.Net.Compilers

और C # 6 के बजाय जेनकींस में C # 7 कंपाइलर को चुना और पुनर्निर्माण किया, यह सुनिश्चित करने के लिए कि सब कुछ सही ढंग से काम कर रहा है और निर्माण कर रहा है।

अंत में अपने मुख्य कार्यक्रम में मैंने अपने आंतरिक घटक को अपडेट करने की कोशिश की। और फिर से निर्माण से सब कुछ। इसे बिना किसी समस्या या मुद्दों के बनाया गया है।


8

मेरे मामले में मुझे सिर्फ विजुअल स्टूडियो सॉल्यूशन एक्सप्लोरर (वेब ​​एप्लीकेशन प्रोजेक्ट) में बिन डायरेक्टरी में जाने की जरूरत थी और इसमें रोसलिन प्रोजेक्ट को सीधे शामिल करना था। फ़ोल्डर पर राइट क्लिक करके और इनक्लूड इन प्रोजेक्ट का चयन करें। और बिल्ड प्रक्रिया को ट्रिगर करने के लिए फिर से समाधान में जांच करें।

रोसलिन फ़ोल्डर को डिफ़ॉल्ट रूप से शामिल नहीं किया गया था।


7

अपग्रेड Microsoft.CodeDom.Providers.DotNetCompilerPlatformकरने के लिए 1.0.0 से मेरे लिए यह तय किया गया।


6

प्रोजेक्ट फ़ाइल खोलें और आयात प्रोजेक्ट = ".. \ पैकेज \ Microsoft.CodeDom.Providers.DotNetCompilerPlatform.1.0.0 ... के साथ सभी संदर्भ हटा दें ।"

Web.config खोलें और सभी system.cod स्वतंत्रता संकलक विशेषताओं को हटा दें


6

पहले से ही द्वारा बताया गया है /programming/32780315#34391473 , त्वरित सुधार पैकेज मैनेजर उपयोग है, Tools> Nuget Package Manager> Package Manager Console, चलाने के लिए

Update-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -r

पैकेट मैनेजर कंसोल - कैसे खोलें

लेकिन एक वैकल्पिक समाधान (जो स्वचालित रूप से और चुपचाप आपके पैकेज को फिर से बनाता है यदि वे गायब हैं) आपकी परियोजना की Web.configफ़ाइल की एक विशेषता को हटाने के लिए है।
( Web.configआपकी जैसी ही डायरेक्टरी में है.csproj फ़ाइल ।)

Web.configफ़ाइल को टेक्स्ट एडिटर में खोलें (या विजुअल स्टूडियो के अंदर)।
- टैग में configuration> system.codedom> compilers> compiler language="c#;cs;csharp", पूरी तरह से हटाने के typeगुण।

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <!-- ... -->
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
      <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
        type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.5.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
        warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+"/>
    </compilers>
  </system.codedom>
</configuration>

संक्षेप में, उस रेखा को हटा दें जो इसके साथ शुरू होती है type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft

(संभवतः, वही फ़िक्स विजुअल बेसिक के साथ-साथ Csharp के लिए भी काम करता है, लेकिन मैंने इसकी कोशिश नहीं की है)।

विजुअल स्टूडियो बाकी का ध्यान रखेगा। अब और नहींServer Error in '/' Application

आपके द्वारा ऊपर ज़िप फ़ाइल में दिए गए उदाहरण कोड में अब HTTP Error 403 आपको हिट Ctrl+ होने पर मिलेगा F5

HTTP एरर 403.14 - निषिद्ध

http://localhost:64195अपने वेब ब्राउज़र में बदलने का प्रयास करें http://localhost:64195/api/products
वेब API अब वह प्रदर्शित करता है जैसे उसे करना चाहिए:

एक वेब एपीआई युक्त उत्पादों

एक उत्तेजना के रूप में, मैंने packageअपने विजुअल स्टूडियो समाधान की पूरी निर्देशिका को हटाने की कोशिश की ।
जैसे ही मैंने (पुनः-) इसका निर्माण किया, यह स्वतः और मौन रूप से पुनः निर्मित हो गया।


अंतिम लेकिन कम से कम, यहां वह कोड है जो त्रुटि को पुन: पेश करता है: http://schulze.000webhostapp.com/vs/SrvrErr-reproduce.zip (मूल रूप से https://github.com/aspnet/AnNetDocs/tree/master/aspnet से / वेब-एपीआई / अवलोकन / उन्नत / कॉलिंग-ए-वेब-एपीआई-ए-नेट-क्लाइंट / नमूना / सर्वर / ProductsApp )

सर्वर त्रुटि


6

बिन फ़ोल्डर के अंदर सब कुछ हटाने और मेरे लिए सभी काम करने के द्वारा मेरे मामले में।


2
मुझे लगता है कि यह अधिक सरल और प्रभावी है। आमतौर पर मुझे यह प्रॉजेक्ट एक रिपॉजिटरी से एक नए कंप्यूटर में क्लोनिंग के बाद मिलता है।
जोनाथन ऑर्टेगा

इसे आज़माने के बाद, मुझे डिबगर में चलने पर IIS एक्सप्रेस से 403 निषिद्ध मिला। विज़ुअल स्टूडियो को फिर से शुरू करने से या तो मदद नहीं मिली, लेकिन विंडोज ने रिबूट किया।
फ्लोरियन विंटर

6

प्रोजेक्ट को चलाते समय मेरे पास भी यही समस्या थी। यहाँ कदम है कि मैं पीछा कर रहे हैं।

  1. समाधान में राइट क्लिक करें
  2. स्वच्छ समाधान का चयन करें
  3. साफ सफल होने के बाद, फिर से अपनी परियोजना का निर्माण करें
  4. प्रोजेक्ट को फिर से चलाएँ

इस बार मैंने वही त्रुटि नहीं देखी। यह उम्मीद के मुताबिक काम करता है।


सहकर्मियों ने बताया कि कंसोल से NuGet पैकेज को अपडेट करना काम करता है, लेकिन यह भी बिना किसी कमांड को चलाने के काम करता है। मेरा चुना हुआ जवाब।
tsemer

5

यदि आप MVC में अपने रेज़र के विचारों को संकलित करने के लिए ASPNETCOMPILER को जोड़ रहे हैं, जैसे कि StackOverflow प्रश्न में , तो PhysicalPath को उस स्थान पर बदलें जहाँ Roslyn nuget पैकेज स्थित है (आमतौर पर $ CscToolRath चर के माध्यम से बताया गया है ):

<Target Name="AfterBuild" Condition="'$(MvcBuildViews)'=='true'">
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(CscToolPath)" />


5

डिफ़ॉल्ट VS2015 टेम्प्लेट के साथ समस्या यह है कि संकलक वास्तव में {outdir}_PublishedWebsites\tfr\bin\roslyn\निर्देशिका में कॉपी नहीं किया गया है , बल्कि {outdir}\roslyn\निर्देशिका। यह आपके स्थानीय वातावरण से अलग है क्योंकि AppHarborसमाधान "इन-प्लेस" के निर्माण के बजाय आउटपुट निर्देशिका का उपयोग करके ऐप्स बनाता है।

इसे ठीक करने के लिए, .csprojxml ब्लॉक के ठीक बाद फ़ाइल के अंत में निम्नलिखित जोड़ें<Target Name="EnsureNuGetPackageBuildImports" BeforeTargets="PrepareForBuild">...</Target>

<PropertyGroup>
  <PostBuildEvent>
    if not exist "$(WebProjectOutputDir)\bin\Roslyn" md "$(WebProjectOutputDir)\bin\Roslyn"
    start /MIN xcopy /s /y /R "$(OutDir)roslyn\*.*" "$(WebProjectOutputDir)\bin\Roslyn"
  </PostBuildEvent>
</PropertyGroup>

संदर्भ: https://support.appharbor.com/discussions/problems/78633-cant-build-aspnet-mvc-project-generated-from-vstudio-2015-enterprise


1
/ D विकल्प केवल नई फ़ाइलों की प्रतिलिपि बनाता है ("दिनांक" के लिए खड़ा है)। ध्यान रखें कि बादल / azure में तैनात रहें, जहां समय स्थानीय समय के पीछे / पीछे हो सकता है।
मैक्स

4

मेरे मामले में, बसीम के समान, एक नुगेट पैकेज था जो संकलक को बता रहा था कि हमें C # 6 की आवश्यकता है, जो हमने नहीं किया।

हमें नुगेट पैकेज को हटाना पड़ा Microsoft.CodeDom.Providers.DotNetCompilerPlatformजिसे फिर हटा दिया गया:

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> package.config फ़ाइल से
  2. <system.codedom> <compilers> <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" /> <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" /> </compilers> </system.codedom>

में system.codedomनोड, आप देख सकते हैं क्यों यह Roslyn में लाने गया था:compilerOptions="/langversion:6


1
मुझे बस इतना करना था कि NuGet पैकेज "Microsoft.CodeDom.Providers.DotNetCompilerPlatform" की स्थापना रद्द कर दी गई थी और इसने इसे मेरे लिए हल कर दिया (मेरी परियोजना लक्ष्य .NET 4.5.2)।
ब्लूस्की

1
इसने मेरे लिए काम किया। आप Microsoft.Net.Compilers को निकालना चाहते हैं क्योंकि इस अतिरिक्त निर्भरता को आसपास रखने का कोई कारण नहीं है।
हमेशा

4

अपने समाधान एक्सप्लोरर में बिन फ़ोल्डर को हटाएं और समाधान को फिर से बनाएं। इससे समस्या का समाधान होगा


धन्यवाद! मेरे लिए भी काम किया। इसके अलावा मैंने अपने सभी नगेट पैकेज
आंद्रे

4

सर्वर पर अपना एप्लिकेशन इंस्टॉल करते समय मुझे एक ही समस्या थी जब सब कुछ स्थानीयहोस्ट पर पूरी तरह से काम करता था।

इनमें से कोई भी समाधान व्यर्थ नहीं गया, मेरी हमेशा एक ही त्रुटि थी:

Could not find a part of the path 'C:\inetpub\wwwroot\myApp\bin\roslyn\csc.exe'

मैंने यह करना समाप्त कर दिया:

  • मेरे सेटअप प्रोजेक्ट, राइट क्लिक, व्यू> फाइल सिस्टम पर
  • एक bin/roslynफ़ोल्डर बनाएँ
  • Add> files को सेलेक्ट करें और सभी files को इसमें से जोड़ें packages\Microsoft.Net.Compilers.1.3.2\tools

इससे मेरी समस्या हल हो गई।


4

रिबूट विंडोज।

यह एकमात्र समाधान है जो पुनर्निर्माण के प्रयास, हटाने binऔर पुनर्निर्माण के बाद मेरे लिए काम करता है , Visual Studio को पुनरारंभ करें।

यह अभी तक एक और उदाहरण है कि C # /। NET निर्माण उपकरण कितने भयानक हैं।

मुझे लगता है कि (कई उत्तरों को पढ़ने के बाद), समग्र निष्कर्ष यह है कि इस समस्या का कारण और समाधान बहुत हद तक सेटअप और प्रोजेक्ट पर निर्भर करता है, इसलिए यदि एक उत्तर काम नहीं करता है, तो बस एक और प्रयास करें। NuGet संकुल के साथ खिलवाड़ करने या विकास साधनों को पुन: स्थापित करने से पहले, गैर-घुसपैठिए / विनाशकारी समाधानों की कोशिश करें, जैसे Visual Studio को फिर से शुरू करना, रिबूट करना, पुनर्निर्माण करना, आदि। सौभाग्य!

(नोट: विजुअल स्टूडियो 2019 का उपयोग करना, और प्रोजेक्ट फाइल मूल रूप से विजुअल स्टूडियो 2015 में बनाई गई थी। हो सकता है कि इससे किसी को समस्या की जांच करने में मदद मिले)

(संपादित करें: जब इंस्टॉलर रिबूट करने का संकेत देता है तो विजुअल स्टूडियो इंस्टॉलेशन को स्थापित / संशोधित करने या विजुअल स्टूडियो को अपडेट करने के बाद रिबूट न ​​करने के कारण ऐसा हो सकता है?)


3

मेरे पास csproj फ़ाइल के बिना वेबप्रोजेक्ट है और यहाँ बताए गए समाधान मेरे लिए कारगर नहीं थे।

लक्ष्य .NET फ्रेमवर्क को बदलना, पैकेजों को फिर से स्थापित करना ( Update-Package -reinstall) और फिर प्रोजेक्ट का निर्माण करना मेरे लिए काम कर गया। आप इस ऑपरेशन के बाद भी टारगेट फ्रेमवर्क को बदल सकते हैं।


यह एक "वेबसाइट प्रोजेक्ट" है। मैंने इस कमांड का उपयोग सिर्फ एक पैकेज को फिर से स्थापित करने के लिए किया:update-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform -reinstall
गार्डीविस
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.