Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# CodeDom提供程序类型;Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider”文件;找不到_C#_Asp.net_Asp.net Web Api_Msbuild - Fatal编程技术网

C# CodeDom提供程序类型;Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider”文件;找不到

C# CodeDom提供程序类型;Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider”文件;找不到,c#,asp.net,asp.net-web-api,msbuild,C#,Asp.net,Asp.net Web Api,Msbuild,这是一个使用VS2015的WebApi项目 复制步骤: 创建一个空的WebApi项目 将生成输出路径从“bin”更改为“bin\Debug” 跑 在我将构建输出路径从“bin”更改为“bin\Debug”之前,一切都很正常 事实上,除“bin”之外的任何输出路径都不起作用 另外一点是,只要我在“bin\”中留下一个构建,就可以使用另一条到任何地方的输出路径 请帮助提供解决此问题的解决方案。 我想这会给实际部署带来成本问题。根据您的复制步骤,我假设更改应用程序属性中的输出路径是创建应用程序后唯一

这是一个使用VS2015的WebApi项目

复制步骤:

  • 创建一个空的WebApi项目
  • 将生成输出路径从“bin”更改为“bin\Debug”
  • 在我将构建输出路径从“bin”更改为“bin\Debug”之前,一切都很正常 事实上,除“bin”之外的任何输出路径都不起作用

    另外一点是,只要我在“bin\”中留下一个构建,就可以使用另一条到任何地方的输出路径

    请帮助提供解决此问题的解决方案。
    我想这会给实际部署带来成本问题。

    根据您的复制步骤,我假设更改应用程序属性中的输出路径是创建应用程序后唯一的更改。此更改所做的唯一一件事是告诉Visual Studio将MSBuild的输出程序集放入新文件夹中。但是,在运行时,ASP.Net不知道应该从这个新文件夹而不是\bin文件夹加载程序集

    这显示了更改WebApi应用程序的生成输出目录的方法。要获得与那篇文章中显示的完全相同的错误,您需要在web.config中注释掉整个部分。然后您可以按照说明更改输出路径

    在您的应用程序运行后,您可以取消对该部分的注释。如果应用程序中根本不使用C#6新语法,则可以从应用程序中卸载Microsoft.CodeDom.Providers.DotNetCompilerPlatform;否则,您可能希望在生成后事件中添加以下命令行

    xcopy /Q /Y "$(TargetDir)roslyn\*.*" "$(TargetDir)..\roslyn\"
    
    <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>
    
    新的CodeDom提供程序始终在\bin中查找“\roslyn”文件夹。上述命令作为一种解决方法,将\roslyn文件夹从新的输出文件夹复制到\bin

    但是,在我的实验中,Visual Studio的发布工具将输出程序集发布到部署位置的\bin文件夹,而不考虑我的输出路径设置。我想您的应用程序仍应在实际部署中工作

    请注意遵循此答案的建议。虽然它解决了手头的问题,但以后可能会导致不同的问题。

    我也有同样的问题。显然.NET编译器没有加载到
    GAC
    。我解决这个问题的方法是:

    首先,在package manager控制台中键入:

    PM> Install-Package Microsoft.CodeDom.Providers.DotNetCompilerPlatform
    
    现在,出于某种原因,微软的绅士们决定不为我们把它安装到GAC上。通过打开开发人员命令提示符并键入以下内容,可以手动执行此操作:

    gacutil -i "C:\*PATH TO YOUR APP CODE*\bin\Microsoft.CodeDom.Providers.DotNetCompilerPlatform.dll"
    
    结论
    微软试图鼓励每个人用nuget做任何事情,这样就不会有你在nuget系统中偶尔遇到的bug。尝试在不同的解决方案上使用同一个项目,意外地(或不)更新它在其中一个解决方案上使用的众多NUGET中的一个,如果你运气不好,当你尝试构建另一个解决方案时,你会明白我的意思。另一方面,将文件放在GAC中也可能导致未来的问题,因为人们往往会忘记他们放在那里的内容,然后在设置新环境时忘记包含这些文件。另一种可能的解决方案是将文件放在第三方DLL的中心文件夹中(尽管称编译器为第三方很奇怪),这会在设置新环境时造成引用中断的问题。如果您决定将dll安装到GAC,请小心,并记住您是这样做的。如果没有,请再次为每个项目下载nuget,并承担由其引起的所有恼人的错误(至少在我最终厌倦它并将文件放入GAC时会发生这种情况)。这两种方法都可能让你头疼并产生问题,这只是一个你更喜欢处理哪些问题的问题。微软建议使用nuget系统,一般来说,听他们的建议比听一个不知名的程序员的建议要好,除非你完全厌倦了nuget系统,并且习惯于与GAC打交道足够长的时间,使其成为你更好的选择。

    我的应用程序在Vs2013中也有同样的问题,但在更新到Vs2015后出现错误

  • 在Vs2015中,右键单击项目的References文件夹,打开NuGet Package Manager
  • 在浏览选项卡下,搜索“DotNetCompilerPlatform”并安装“Microsoft.CodeDom.Providers.DotNetCompilerPlatform”库

  • 只需将下一个nuget包添加到您的项目-
    Microsoft.CodeDom.Providers.DotNetCompilerPlatform


    有相同的问题。

    ASP.NET不会像其他类型的应用程序一样,在bin/debug或bin下的任何子文件夹中搜索程序集。您可以使用以下配置指示运行时在其他位置查看:

    <configuration>
       <runtime>   
          <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
             <probing privatePath="bin;bin\Debug;bin\Release"/>
          </assemblyBinding>
       </runtime>   
    </configuration>
    
    
    
    我在解决方案中有许多项目,而web项目(出现此错误的问题)未设置为启动项目。我将这个web项目设置为启动项目,然后单击菜单项“调试”->“启动调试”,它就工作了。我停止了调试,然后再试一次,现在它又开始工作了。奇怪。

    我也遇到了同样的问题,因为我移动了项目位置,只需要重新创建虚拟目录。

    如果您的项目有Roslyn引用,并且您正在IIS服务器上部署它,您可能会在网站上遇到不必要的错误,因为许多托管提供商尚未升级其服务器,因此不支持Roslyn

    要解决此问题,您需要从项目模板中删除Roslyn编译器。删除Roslyn不应影响代码的功能。它对我和我参与的其他一些项目(C#4.5.2)都很有效

    执行以下步骤:

  • 使用命令行从以下Nuget软件包中删除
    <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>
    
    <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>