没有roslyn的发布网站


91

我正在尝试使用Visual Studio 2015和.NET 4.5.1创建Web应用程序。发布网站时,Visual Studio将创建名为的文件夹roslyn

在此处输入图片说明

我知道它曾经用于即时编译代码,但是不幸的是,我的托管服务提供商不允许我在其服务器上执行编译器。

如何在不roslyn使用Visual Studio早期版本的情况下发布网站?

编辑:尝试访问我的网站时出现此错误。

在此处输入图片说明

似乎IIS试图执行,roslyn\csc.exe但是我的用户帐户没有执行该操作的权限。在Visual Studio的早期版本中,不会显示此错误。


此外,Roslyn只是一组DLL。主机不能知道或不在乎他们在做什么。
Slaks

3
@Slaks IIS试图执行csc.exe。参见编辑。
Niyoko Yuliawan

如果您使用的是Plesk,则可以禁用“网站专用的IIS应用程序池”,那么您甚至不需要删除那些软件包!
Vahid Amiri 2015年

Answers:


183

我刚刚遇到了同样的问题。当您创建一个新的Web项目时,两个nuget软件包会自动添加到您的项目中。如果将它们卸下,则应解决您的问题。程序包名称为:“ Microsoft.CodeDom.Providers.DotNetCompilerPlatform ”和“ Microsoft.Net.Compilers ”。


此方法有效,并且适合第三方网络托管提供商。对此有两个疑问-1)删除这些Nuget软件包会以任何方式影响产品吗?2)是否可以从项目模板本身中删除这些软件包,以避免每次都进行此操作?
nura

1)对产品的工作流程或逻辑没有任何影响;但是@ Ajay2707提供的网址(itorian.com/2015/09/roslyn-cscexe-and-vbcexe-deployment-on.html)表示此程序包会影响页面加载时间。2)我不知道您该怎么做,但是如果可以的话,那不会有任何问题。
凯末尔·凯夫利

3
删除了两个NuGet软件包。删除了配置声明。仍然在编译或发布时创建该文件夹。我也需要卸载吗?
Ranjan Kumar'8

8
请记住,删除这些软件包将中断C#6功能的使用。可以通过取消选中“允许预编译的站点可更新”来预编译视图等问题
Rutix 2016年

9
@RanjanKumar:在文本编辑器中打开csproj文件,并删除与Kemal答案中所述的NuGet包相对应的节点。这可能包括Import节点, Target节点(EnsureNugetPackageBuildImports)和Reference节点。同时删除<system.codedom>web.config 的节点。
布赖恩

16

我遇到过同样的问题。从这里开始执行步骤。基本上:

  1. 卸载软件包

    Uninstall-package Microsoft.CodeDom.Providers.DotNetCompilerPlatform <Your Web API project name>
    
  2. 在您的发布配置文件设置中,取消选中“允许预编译站点可更新”。您可以在“设置”>“发布期间预编译”>“配置”下找到此文件


7
这样,您将无法在视图中使用C#6功能。
RokX


2

无数努力之后....并根据该网站。我发现您可以/p:UseWPP_CopyWebApplication=true /p:PipelineDependsOnBuild=false在MSBuild中使用它来转换web.config,这也将roslyn编译器包含在构建中。输出与通过在Visual Studio中发布到文件系统中所获得的输出相同


无法理解网站链接上的文章,但是按照您的建议在MSBuild中添加了构建参数。.就像您说的,输出与我们发布到文件系统中时相同。谢谢
布鲁斯


0

我在2016年9月接管现有的ASP.NET程序时遇到了相同的问题。我发现在解决方案的不同项目中安装了Kemal提到的两个编译器软件包的多个版本。

因此,首先我进行了更新以使它们相同。VS不会告诉您在这种情况下有可用的更新(或者我错过了吗?)

然后,我必须重新启动VS2015才能正确清理软件包。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.