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




asp.net asp.net-mvc (20)

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

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

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

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

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

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


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


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


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

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

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

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

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

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

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>

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


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

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


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

इसे ठीक करने के लिए, xml ब्लॉक के ठीक बाद .csproj फ़ाइल के अंत की ओर जोड़ें <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


तो, रॉबॉन के जवाब ने अनिवार्य रूप से मेरे लिए काम किया, लेकिन मुझे मुट्ठी भर विकल्प चुनने पड़े। विशेष रूप से, मुझे लक्ष्य पर शर्त को हटाना था, साथ ही शामिल विशेषता को बदलना था, क्योंकि जब हमारे बिल्ड सर्वर पर प्रोजेक्ट बनाया जा रहा था, तब $ 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>

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

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


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

इस समस्या वाले किसी को भी शुभकामनाएँ।


मेरे मामले में Nuget संकुल को फिर से स्थापित / अपग्रेड करने के लिए समाधान था:

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

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

संक्षिप्त उत्तर - इसे पैकेज मैनेजर कंसोल में चलाएं:

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


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

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

उपाय

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

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

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

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


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

हमें NuGet पैकेज Microsoft.CodeDom.Providers.DotNetCompilerPlatform को हटाना था। CodeDom.Providers.DotNetCompilerPlatform जो तब हटा दिया गया था:

  1. <package id="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" version="1.0.0" targetFramework="net452" /> पैकेजों से। फाइल फ़ाइल
  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 नोड में, आप देख सकते हैं कि यह रोसलिन में क्यों ला रहा था: compilerOptions="/langversion:6


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


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

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



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

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

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

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

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

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


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

Microsoft.CodeDom.Providers.DotNetCompilerPlatform

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


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

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

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

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

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

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


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





roslyn