相关疑难解决方法(0)

无法找到CodeDom提供程序类型"Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider"

这是一个使用VS2015的WebApi项目.

重现步骤:

  1. 创建一个空的WebApi项目
  2. 将构建输出路径从"bin"更改为"bin\Debug"

在此输入图像描述

一切都工作正常,直到我将构建输出路径从"bin \"更改为"bin\Debug \"实际上,除"bin"之外的任何输出路径都不起作用.

还有一点是,只要我在"bin"中留下构建版本,就可以使用另一个输出路径到任何地方.

请帮助提供解决方案.我想这会在实际部署上造成成本问题.

c# asp.net msbuild asp.net-web-api

143
推荐指数
10
解决办法
20万
查看次数

什么/为什么Roslyn"需要"在Asp.Net的/ bin文件夹中

虽然大多数答案定义了 Roslyn和/或为某些问题提供了"修复"(与托管服务提供商等),但是有很多相关的问题.exe

我似乎无法追查的是"为什么"和"为什么"(可能仅在ASP.Net MVC/Web API的上下文中)/bin/roslyn.

我遇到了类似的问题(托管 - .exe限制,支持4.6等),我的"修复"是"只是部署到Azure"(当然一切都顺利).但实际上,这并没有回答:

  • 他们为什么需要?
  • 这是否意味着他们用于runtime编译(我的大脑指向这个,但这是一个完整的猜测/我可能是错误的grok),正如这篇SO帖子所示 - 除非纠正,这是"它"(更多下面).
  • 似乎"删除包"是一个"修复" (基于一些过去的答案),但如果是这样,它(重新)回答问题

我认为理解这一点会有所帮助 - 例如,我不可能是唯一一个会看到.exe"需要" 的眉毛......


更新

去表明存在"隐藏的宝石":)我已经一遍又一遍地阅读 ......毕竟它已经存在了一段时间 - 但不是评论主题.大错 - 它一直盯着我(或者至少从这次交换开始):

Dmitry Dzygin 2015年6月2日12:53 AM

我已经尝试了最新版本的NuGet包,但是编译器加载/执行的方式似乎有所不同.

在v0.2.0.0中,Roslyn编译器将被加载到内存中,从而大大提高了多个*.as*x/*.cshtml文件的预编译网站的性能.然而,新版本具有一个新/bin/roslyn/csc.exe文件,每个文件执行一次,完全删除上述优化功能.....

金:

XMao 2015年6月2日下午1:22

@Dmitry的的工作csc.exe/bin/Roslyn是调用VBCSCompiler.exe,在同一文件夹它坐落.VBCSCompiler.exe 是进行实际编译工作的过程.如果VBCSCompiler已在运行,csc.exe将重用它,因此我们仍将获得上述性能提升.

心连心...


更新:10/2017

似乎这是相关的所有这一次所以进一步更新.

@Donny V下面答案是一个选项.通过完全编译您的应用程序,包括所有Views …

roslyn asp.net-web-api asp.net-mvc-5

69
推荐指数
3
解决办法
5万
查看次数

无法删除\ bin\roslyn\VBCSCompiler.exe - 访问被拒绝

我正面临一个来自roslyn编译器的奇怪问题.有时当我构建解决方案时,我在错误列表中面临一个奇怪的问题,这不会让我构建解决方案.这是错误:

严重级代码说明项目文件行抑制状态错误无法将文件"D:\ Sealogical New Website\SealogicalWebsite\packages\Microsoft.Net.Compilers.1.0.0\tools\csc.exe"复制到"bin\roslyn\csc.exe" ".访问路径'bin\roslyn\csc.exe'被拒绝.SealogicalWebsite

严重级代码说明项目文件行抑制状态错误无法将文件"D:\ Sealogical New Website\SealogicalWebsite\packages\Microsoft.Net.Compilers.1.0.0\tools\VBCSCompiler.exe"复制到"bin\roslyn\VBCSCompiler.exe" ".访问路径'bin\roslyn\VBCSCompiler.exe'被拒绝.SealogicalWebsite

  1. 我尝试清理解决方案并重建它但不再工作.

  2. 试图手动删除文件,但再次显示错误指出我没有权限执行此操作:

  3. 尝试删除CMD但再次显示相同的错误:

尝试手动删除文件时的图像

删除roslyn生成的文件的唯一方法是重新启动PC,重启后我可以手动删除它们没有问题.

我是我的电脑的管理员,所以我猜没有问题.

这个问题似乎发生在Visual Studi0 2015和Visual Studio 2017中.

我不喜欢每天重启PC 4-5次或更多,这就是我在这里问的原因.

其他一些细节:

  • 我是创建这个项目的人,所以理论上做这个动作应该不是问题.

  • 当项目第一次创建时,我确实以管理员模式运行Visual Studion,正如我现在所做的那样.

  • 我在我的项目中使用ASP.MVC 5模板.
  • 不被删除的文件是bin/roslyn/cscbin/roslyn/VBCSCompiler.

我可以找到一个从web.config中删除此部分的解决方案,因此它不会生成这些文件:

<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>
Run Code Online (Sandbox Code Playgroud)

但是这个解决方案会导致新的c#6功能出现问题,所以我无法删除此部分.....

此外,我在CMD中尝试了这个命令来查看是否存在锁定此文件的进程,但无论如何它根本没有显示任何进程:

C:\WINDOWS\system32>tasklist /m D:\SealogicalNewWebsite\SealogicalWebsite\SealogicalWebsite\bin\roslyn\csc.exe
INFO: No tasks are running which match the specified criteria. …
Run Code Online (Sandbox Code Playgroud)

c# asp.net-mvc roslyn visual-studio-2015 visual-studio-2017

56
推荐指数
3
解决办法
2万
查看次数

使用Roslyn构建,但在门口保留"运行时编译"可执行文件?

有很多关于StackOverflow上的C#编译器Roslyn和一般的互联网的讨论.很多人问罗斯林的原因和原因,而其他人则问如何摆脱它.

我的问题与后一个问题有关.正如Kemal Kefeli这里引用的那样,但经常多次逐字迭代(例如迭代的另一个例子),以便删除Roslyn:

创建新的Web项目时,会自动将两个NuGet包添加到项目中.如果你删除它们,你的问题应该解决.包名称为:" Microsoft.CodeDom.Providers.DotNetCompilerPlatform "和" Microsoft.Net.Compilers ".

但是,如果您使用Roslyn提供的C#6功能,则此方法不起作用.通过删除这两个块包,您放弃了使用这些功能的任何机会.

我的问题是,你如何编译一切与罗斯林,但避免任何编译器在运行时发生的行为,最重要的是csc.exe,vbc.exeVBCSCompiler.exe被放置在最终发布版本(在罗斯林文件夹).

我正在将StackOverflow的 Opserver移植到一个软件中.该软件允许用户从其中托管嵌入式Web服务器和网页.不过,该软件是什么,它允许被上传和可执行文件,就像那些在罗斯林文件夹中找到非常挑剔,都不会允许被上传,并在运行时执行,由于安全方面的原因.

Opserver依赖于C#6功能,因为如果删除这两个 NuGet包,则会在编译生成的文件中出错.但是,如果我更简单地恢复使用 C#5.0编译器严格编译,那么我们清楚地看到了这一点:

5.0错误##标题##

如果我离开的NuGet包存在,并且取消allow precompiled site to be updatable发布时,为了与编译后在运行时的文件,以禁止罗斯林为随后Rutix从"的评论在这里:

请记住,删除这些软件包[由Kemal Kefeli讲述]将打破C#6功能的使用.这可以通过取消选中"允许预编译的站点可更新"来解决,该预先编译视图等.

不要在运行时编译

它仍然在Roslyn文件夹中生成可执行文件和相关的DLL,但是DLL却少得多.我怎样才能在运行时删除Roslyn依赖项,从而从输出版本中删除可执行文件并在编译时严格编译所有内容

asp.net roslyn opserver c#-6.0 visual-studio-2015

11
推荐指数
1
解决办法
1201
查看次数

MSBuild从输出中排除附属程序集

是否有可能告诉MSBuild不要为某个组件或所有组件复制卫星组件?

我有一个nuget包,其中包含资源程序集,但我不想将它们包含在我的输出中.

谢谢.

c# msbuild satellite-assembly

6
推荐指数
1
解决办法
835
查看次数