在smarterasp.net上发布包含csc.exe文件的网站时出现问题?

Ahr*_*zky 47 c# asp.net visual-studio-2015

我使用的是Microsoft Visual Studio 2015,我使用C#联系表单构建了一个简单的网站.当我在localhost上编译和运行时,它运行得非常好.但是,当我尝试发布它(在smarterasp.net上)时,我收到一个错误:

[Win32Exception(0x80004005):访问被拒绝]

[ExternalException(0x80004005):无法执行程序.正在执行的命令是"..\bin\roslyn\csc.exe"

我联系过smarterasp.net,他们说他们不允许.exe文件.我试图从服务器上删除带有ftp的csc.exe,但是当我这样做时,我收到错误:

找不到文件"..\bin\roslyn\csc.exe".

如何使用试图包含在我的项目中的csc.exe解决此问题,以便我可以发布我的这个网站?

Ahr*_*zky 88

经过几个小时的研究,我想出了解决方案.

自.NET 4.5版本以来,Roslyn编译是默认的编译方式.这意味着如果您使用.NET 4.5创建任何Web应用程序Web窗体或MVC,您将在项目中预先安装此Roslyn csc.exe编译.

基本上我需要的是在没有Roslyn或任何.exe文件的情况下编译和部署我的项目.

所以这里的解决方案对我有用.您可以在没有Roslyn的情况下进行部署而无需更改代码:

  1. 打开NuGet Package Manager窗口
  2. 卸载Microsoft.CodeDom.Providers.DotNetCompilerPlatform包并重建并重新发布.(此卸载还会从web.config文件中删除CodeDom配置.)

这将解决您的目的.基本上这不会在bin文件夹中生成任何csc.exe,vbc.exe文件.

我希望它对你也有用!

  • 完成此操作后,您将不再能够在Razor(.cshtml)文件中使用C#6.0语言功能... (2认同)

小智 20

我在Smarter ASP上遇到过这个问题.在控制面板中的浏览器文件管理器上,导航到bin中的'Roslyn'文件夹并设置.net权限以进行读/写.它起作用了.


Eri*_*ris 17

如果你真的想保留roslyn codegen,你只需要在应用程序的bin文件夹上设置权限,以允许ApplicationPool用户Read&Execute.

我使用文件夹属性对话框中的资源管理器"安全"选项卡执行此操作,但您还应该能够执行以下操作:

icacls PATH_TO_SERVICE_BIN /grant "ApplicationPoolUser":(OI)(CI)RX
Run Code Online (Sandbox Code Playgroud)

  • 这应该被标记为正确答案。这从根本上解决了问题,不仅隐藏了症状。 (2认同)

kpr*_*kpr 13

我发现解决方案在发布窗口中取消选中"允许预编译的站点可更新". 在此输入图像描述


小智 11

只需/bin在Smarterasp.net文件管理器中设置文件夹的rw访问权限,如下所示,重新启动您的应用程序

有关详情,请参见此图片


小智 10

只需从Web.config中删除codedom部分,就可以解决问题.


k-d*_*dev 10

刚刚在VS2015中通​​过Web部署发布ASP.net 4.5.2 SPA时遇到了与OP相同的问题.

我发现工作的解决方案是删除Nuget包"Microsoft.CodeDom.Providers.DotNetCompilerPlatform".

或者,您可以从Web.config文件中删除system.codedom编译器配置部分,这会产生相同的影响.