Asp.net 与Roslyn一起建造,但留下;“在运行时编译”;门口的可执行文件?

Asp.net 与Roslyn一起建造,但留下;“在运行时编译”;门口的可执行文件?,asp.net,visual-studio-2015,roslyn,c#-6.0,opserver,Asp.net,Visual Studio 2015,Roslyn,C# 6.0,Opserver,关于StackOverflow和internet上的C#编译器已经有很多讨论。很多人问Roslyn,而其他人问怎么做 我的问题与后一个问题有关。引用Kemal Kefeli的话,但为了删除Roslyn,经常会逐字重复几十次(例如多次重复): 创建新的web项目时,两个NuGet包会自动添加到项目中。如果你移除它们,你的问题就应该得到解决。包名称为:“Microsoft.CodeDom.Providers.DotNetCompilerPlatform”和“Microsoft.Net.Compile

关于StackOverflow和internet上的C#编译器已经有很多讨论。很多人问Roslyn,而其他人问怎么做

我的问题与后一个问题有关。引用Kemal Kefeli的话,但为了删除Roslyn,经常会逐字重复几十次(例如多次重复):

创建新的web项目时,两个NuGet包会自动添加到项目中。如果你移除它们,你的问题就应该得到解决。包名称为:“Microsoft.CodeDom.Providers.DotNetCompilerPlatform”和“Microsoft.Net.Compilers

但是,如果您使用的是Roslyn提供的C#6功能,那么这种方法就不起作用。通过删除这两个nugget包,您就放弃了使用这些功能的任何机会

我的问题是,如何使用Roslyn编译所有内容,但避免在运行时发生任何编译器操作,最重要的是,
csc.exe
vbc.exe
、和
VBCSCompiler.exe
,使其不被放入最终发行版本(Roslyn文件夹中)

我正在将StackOverflow的移植到一个软件中。该软件允许用户从中托管嵌入式web服务器和网页。但是,该软件对允许上载的内容非常挑剔,并且由于安全原因,不允许在运行时上载和执行可执行文件(如Roslyn文件夹中的可执行文件)

依赖于C#6特性,因为如果我删除这两个NuGet包,编译生成的文件中就会出现错误。但是,如果我更简单地回到C#5.0编译器,那么我们可以清楚地看到:

如果我保留NuGet软件包,并在发布时取消选中“允许预编译站点可更新”,以禁止Roslyn在运行时编译文件,随后是Rutix的评论:

请记住,删除这些软件包[如Kemal Kefeli所说]将破坏C#6功能的使用。这可以通过取消选中“允许预编译的站点可更新”来解决,该选项会预编译视图


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

在完全预编译的ASP.NET项目中(“允许预编译的站点可更新”禁用),无需使用应用程序IMHO部署编译器

我在我的.NET 4.6 ASP.NET应用程序(Web表单和MVC的混合)中使用Roslyn,预编译的应用程序在从发布的站点删除Roslyn文件夹\文件后工作正常


更新:过了一段时间,在部署包中找不到Roslyn的唯一地方是在浏览器中访问ASMX(旧式ASP.NET SOAP web服务)的问题,ASMX的“帮助”页面显然是在运行时生成的,即使是完全预编译的ASP.NET应用程序,它也会引发异常(尽管WS本身运行正常)

我和你在同一条船上。@HamzaAhmedZia我在附近找到了一份工作。当我在第二天左右有时间的时候,我会发布我的问题的答案。@DanHoynoski差不多一年后,我也在尝试同样的事情。这种变通方法解决了你的问题吗?你能把它寄出去吗?