簡體   English   中英

"找不到 CodeDom 提供程序類型“Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider”"

[英]The CodeDom provider type "Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider" could not be located

這是一個使用 VS2015 的 WebApi 項目。

重現步驟:

  1. 創建一個空的 WebApi 項目<\/li>
  2. 將構建輸出路徑從“bin\\”更改為“bin\\Debug\\”<\/li>
  3. <\/li><\/ol>

    在此處輸入圖像描述<\/a>

    在我將構建輸出路徑從“bin\\”更改為“bin\\Debug\\”之前,一切都運行良好。事實上,除“bin\\”之外的任何輸出路徑都不起作用。

    還有一點額外的事情是,只要我在“bin\\”中留下一個構建,就可以使用另一個輸出路徑到任何地方。

    請幫助提供解決方案來解決這個問題。 我想這會在實際部署中產生成本問題。

如果您的項目有Roslyn 引用<\/strong>,並且您將其部署在IIS 服務器上<\/strong>,您可能會在網站上收到不必要的錯誤,因為許多托管服務提供商仍未升級其服務器,因此不支持 Roslyn。

要解決此問題,您需要從項目模板中刪除 Roslyn 編譯器<\/strong>。 刪除 Roslyn 不應影響代碼的功能。 它對我和我工作的其他一些項目(C# 4.5.2)來說工作得很好。

執行以下步驟:

  1. 使用如下所示的命令行從以下 Nuget 包中刪除(或者您可以通過右鍵單擊根項目解決方案並刪除它們來使用 Nuget 包管理器的 GUI<\/em> )。

  2. 從您的 Web.Config 文件中刪除以下代碼並重新啟動 IIS<\/strong> 。 僅當步驟 1 不能解決您的問題時才使用此方法。<\/em> )

請注意遵循此答案的建議。<\/strong> 雖然它解決了手頭的問題,但它可能會在以后導致不同的問題。<\/strong>

<\/blockquote>

我遇到了同樣的問題。 顯然 .NET 編譯器沒有加載到GAC<\/code> 。 我為解決它所做的是:

首先,在包管理器控制台中輸入:

現在,出於某種原因,微軟的好先生們決定不為我們將它安裝到 GAC。 您可以通過打開開發人員命令提示符並鍵入以下內容手動執行此操作:

結論<\/h2>

微軟試圖鼓勵每個人都使用 nugets 做所有事情,如果沒有你在 nuget 系統中偶爾遇到的錯誤,這可能會很好。 嘗試在不同的解決方案上使用相同的項目,不小心(或不)更新它在其中一個上使用的眾多 nuget 之一,如果你不走運,當你嘗試構建另一個解決方案時,你會明白我的意思。 另一方面,將文件放入 GAC 也會導致未來的問題,因為人們往往會忘記放在那里的內容,然后在設置新環境時忘記包含這些文件。 另一種可能的解決方案是將文件放在第 3 方 dll 的中央文件夾中(即使將編譯器稱為第 3 方很奇怪),這會在設置新環境時造成引用損壞的問題。 如果您決定將 dll 安裝到 GAC,請謹慎行事並記住您這樣做了。 如果不這樣做,請再次下載每個項目的 nuget,並承擔由它引起的所有煩人的錯誤(至少在我最終厭倦它並將文件放入 GAC 時曾經發生過)。 這兩種方法都可能讓您頭疼並產生問題,這只是您更喜歡處理哪些問題的問題。 Microsoft 建議使用 nuget 系統,一般來說,最好聽他們而不是 SO 中不知名的程序員,除非你完全厭倦了 nuget 系統並且習慣與 GAC 打交道的時間足夠長,以使其成為更好的選擇為你。

"

只需將下一個 nuget 包添加到您的項目 - Microsoft.CodeDom.Providers.DotNetCompilerPlatform

有同樣的問題。

我的應用程序在 Vs2013 中運行時遇到相同的問題,但在更新到 Vs2015 后出現錯誤。

  1. 在 Vs2015 中,右鍵單擊項目的 References 文件夾,打開 NuGet 包管理器<\/li>
  2. 在瀏覽選項卡下,搜索“DotNetCompilerPlatform”並安裝“Microsoft.CodeDom.Providers.DotNetCompilerPlatform”庫<\/li><\/ol>"

我知道這是一個舊線程,但我想指出 DotNetCompilerPlatform.dll,f 的可能版本問題。 前任。 更新后。 請檢查新生成的 Web.config 文件是否與您發布的 web.config 不同,尤其是 system.codedom 部分。 就我而言,這是從 1.0.7 到 1.0.8 的版本更改。 新的 dll 已經復制到服務器,但我沒有更改舊的 web.config(帶有一些服務器特殊設置):

<pre>
  <system.codedom>
    <compilers>
      <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.8.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.8.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    </compilers>
  </system.codedom>
</pre>

更新這兩行后,錯誤消失了。

另一種可能的解決方案:<\/strong>

➜ 使用管理員權限<\/strong>重新啟動您的 Visual Studio 實例

根據您的復制步驟,我假設更改應用程序屬性中的輸出路徑是您創建應用程序后唯一的更改。 此更改所做的唯一事情是它告訴 Visual Studio 將 MSBuild 的輸出程序集放入新文件夾中。 然而,在運行時,ASP.Net 不知道它應該從這個新文件夾而不是 \\bin 文件夾加載程序集。

答案<\/a>顯示了更改 WebApi 應用程序的構建輸出目錄的方法。 要獲得該帖子中顯示的完全相同的錯誤,您需要注釋掉 web.config 中的整個 <system.codedom> 部分。 然后您可以按照說明更改輸出路徑。

完成應用程序后,您可以取消注釋 <system.codedom> 部分。 如果您在應用程序中根本不使用 C# 6 新語法,則可以從應用程序中卸載 Microsoft.CodeDom.Providers.DotNetCompilerPlatform; 否則,您可能需要在構建后事件中添加以下命令行,

xcopy /Q /Y "$(TargetDir)roslyn\*.*" "$(TargetDir)..\roslyn\"

簡單的方法-項目>管理NuGet包...>瀏覽(選項卡)>在搜索輸入中設置:Microsoft.CodeDom.Providers.DotNetCompilerPlatform

您可以安裝或更新或卸載並安裝此編譯器

點網編譯器平台

就我而言,這發生在我更改應用程序文件夾的權限並且帳戶 IIS_IUSRS 已被刪除時。 在我將 IIS_IUSRS(IIS 管理器 -> YourWebApp -> 編輯權限 -> 添加 IIS_IUSRS)重新添加到應用程序文件夾后,它就可以工作了。

"

它在生產服務器上發布后停止。 它向我顯示此錯誤的原因是因為它已部署到文件夾。 在 IIS 中,我在子文件夾上單擊鼠標右鍵並執行“轉換為應用程序”,然后它就起作用了。

這是我解決它的方法:

  1. 刪除了項目目錄下的bin文件夾。
  2. 單擊Build Solution VS2017(以管理員身份運行)> 構建 > 構建解決方案

然后問題又來了。 我卸載了Microsoft.CodeDom.Providers.DotNetCompilerPlatform<\/code>和Uninstall-package Microsoft.Net.Compilers<\/code>但沒有幫助。 然后安裝 - 沒有幫助。 清理項目並沒有幫助。 重新啟動服務器沒有幫助。然后我注意到該項目不需要當前是 1.0.5 而是 1.0.3 的最新項目,因為這是錯誤無法加載 1.0.3 版本。 所以我安裝了那個 dll 版本,現在它可以工作了。

"

如果您使用的是 git,您可能會忽略提交中的 .dll

ASP.NET 不會像其他類型的應用程序那樣在bin\/debug<\/code>或 bin 下的任何子文件夾中搜索程序集。 您可以使用以下配置指示運行時查看不同的位置:

<configuration>
   <runtime>   
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <probing privatePath="bin;bin\Debug;bin\Release"/>
      </assemblyBinding>
   </runtime>   
</configuration>

我在解決方案中有許多項目,並且 Web 項目(出現此錯誤的問題)未設置為 StartUp 項目。 我將此Web項目設置為啟動項目,然后單擊菜單項“調試”->“開始調試”,它就可以工作了。 我停止調試,然后再次嘗試,現在它又恢復了。 奇怪的。

只需從下面的命令從包管理器控制台卸載包

PM> 卸載包 Microsoft.CodeDom.Providers.DotNetCompilerPlatform

PM> 卸載包 Microsoft.Net.Compilers

然后從 nuget manager 再次安裝在此處輸入圖像描述

您應該更新項目中的“Microsoft.CodeDom.Providers.DotNetCompilerPlatform”和“Microsoft.Net.Compilers”包。

"

就我而言,當我在 4.5.2 中使用 Web 應用程序並在 4.6.1 中使用引用的類庫時出現錯誤。 當我將 Web 應用程序更新到 4.5.2 版本時,錯誤消失了。

我收到此錯誤是因為我的應用程序池用戶設置為 ApplicationPoolIdentity。 我將其更改為有權訪問該文件夾的用戶\/服務帳戶,錯誤就消失了。

"

這是我的發現。 今天早上我也遇到了這個問題。 我剛剛將當前用戶添加到正在運行應用程序的應用程序池中。

腳步:

  1. 打開 IIS

  2. 單擊應用程序池

  3. 選擇您遇到問題的應用程序池

  4. 右鍵->高級設置

  5. 點擊身份旁邊的三點圖標

  6. 現在選擇自定義帳戶

  7. 提供您的 PC 用戶名和密碼

  8. 保存

刷新您的應用程序..它將開始工作。 訪問 dll 存在一些安全問題。

如果您最近安裝或更新了Microsoft.CodeDom.Providers.DotNetCompilerPlatform<\/code>包,請仔細檢查項目中引用的該包的版本是否指向該包的正確且相同的版本:

  • ProjectName.csproj<\/code>中,確保Microsoft.CodeDom.Providers.DotNetCompilerPlatform<\/code>的<Import><\/code>標記存在並指向正確的版本。

  • ProjectName.csproj<\/code>中,確保Microsoft.CodeDom.Providers.DotNetCompilerPlatform<\/code>的<Reference><\/code>標記存在,並在Include<\/code>屬性和子<HintPath><\/code>中指向正確的版本。

  • 在該項目的web.config<\/code>中,確保存在<system.codedom><\/code>標記,並且其子<compiler><\/code>標記在其type<\/code>屬性中具有相同的版本。

    出於某種原因,在我的情況下,將此包從 1.0.5 升級到 1.0.8 導致.csproj<\/code>中的<Reference><\/code>標記使其Include<\/code>指向舊版本 1.0。 5<\/strong> .0(我在升級軟件包后刪除了它),但其他所有內容都指向新的正確版本 1.0。 8<\/strong> .0。

確保您的項目已完全構建!<\/h3>

單擊“輸出”選項卡並確保您沒有類似的內容:

========== 全部重建:14 個成功,1 個失敗,0 個跳過 =========

並打開您的bin<\/code>文件夾並檢查它是否是最新的。

我一開始忽略了一大堆打字稿錯誤,忘記了它們破壞了構建並導致沒有復制 DLL。

從啟動命令轉到 inetmgr 在 IIS 管理器控制台中,選擇默認網站下的應用程序文件夾,右鍵單擊該文件夾,然后轉換為應用程序通過啟用運行 .asmx 文件它解決了問題

"

添加對 CppCodeProvider 程序集的引用。

在我的情況下,我的 Web 項目沒有正確加載(它顯示項目不可用),然后我不得不在以管理員模式打開我的 Visual Studio 后重新加載我的 Web 項目,然后一切正常。

"

如果您一直在從事一個項目,而這剛剛作為錯誤彈出。 重新啟動您的計算機(或在我的情況下為服務器)這為我解決了這個問題。

"

我只是遇到了同樣的問題,這是因為我移動了項目位置,只需要重新創建虛擬目錄。

"

我們遇到的異常不在本地,而是在遠程服務器上,Azure CI 正在從包文件夾中讀取它,但找不到上面提到的編譯器版本。

為了解決這個問題,我們修改了項目文件,使其類似於

它沒有引用此處直接引用環境變量的任何包。

這解決了這個問題,但是在我們的案例中,我們不直接使用“package.config”中的包,而是有一個單獨的文件夾來維護跨團隊的版本完整性。

檢查文件中的BIN文件夾是否完整上傳或丟失。

關於這個錯誤我試過:

如果您看到這可能是您正在構建發布模式 對於生產,您應該發布而不是在發布模式下構建。 對於本地開發調試模式構建。

在我們的例子中,我們使用的是 ToroiseSVN,似乎默認情況下 bin 文件夾沒有添加到源代碼控制中。 因此,在生產服務器上更新網站時,沒有將 bin 文件夾添加到其中,從而導致此異常。

要將 bin 文件夾添加到 SVN,請轉到硬盤上的文件夾並找到 bin 文件夾。 右鍵單擊它並選擇 TortoiseSVN --> 添加

現在更新存儲庫以包含新添加的文件,然后更新生產服務器。 現在一切都應該好了。

確保計算機的Windows功能中啟用了Internet信息服務(IIS)。 在此處輸入圖片說明

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM