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

问题描述 投票:41回答:13

我使用的是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解决此问题,以便我可以发布我的这个网站?

c# asp.net visual-studio-2015
13个回答
83
投票

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

自.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文件。

我希望它对你也有用!


0
投票

我有同样的错误,我通过启用托管目录的权限(读/写/删除)解决了它。


0
投票

tl; dr:确保csc.exe的大小不是零字节。


更长的答案

添加另一个原因和解决方案:在我的情况下,我在浏览器中得到了这个黄色死亡屏幕:

'/'应用程序中的服务器错误。

编译错误

描述:编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息并相应地修改源代码。

编译器错误消息:编译器失败,错误代码为255。

c:\ windows \ system32 \ inetsrv> C:\ inetpub \ wwwroot \ bin \ roslyn \ csc.exe / t:library / utf8output / nostdlib + ...

版本信息:Microsoft .NET Framework版本:4.0.30319; ASP.NET版本:4.7.2558.0

经过调查,我通过在CMD窗口中执行它来隔离对csc.exe的调用:

c:\inetpub\wwwroot\bin\roslyn\csc.exe

我收到了这个消息框:

enter image description here

在CMD窗口中跟随此行:

访问被拒绝。

检查Windows文件资源管理器中的文件后,我发现csc.exe的大小为零字节。

我不确定我的部署脚本发生在哪个阶段,但是在用实际工作的csc.exe替换0字节大小的csc.exe后,一切正常。


0
投票

上述解决方案对我不起作用并且不正确,因为这些天roslyn不是可选的。

有效的是确保池帐户对Web应用程序的根文件夹具有读取和执行权限。您可以通过查找Web应用程序使用的池名称,然后找到应用程序池 - >池名称 - >高级设置 - >标识,找到要授予此权限的帐户。

我的VPS主机使用非标准目录进行托管,如下所示:

c:\home\web.app.name\wwwroot

web.app.name文件夹需要该权限。


0
投票

将nuget包Microsoft.CodeDom.Providers.DotNetCompilerPlatform更新到最新版本(当时)2.0.1为我解决了这个问题,而无需向该文件夹授予权限或删除编译器。


18
投票

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


16
投票

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

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

icacls PATH_TO_SERVICE_BIN /grant "ApplicationPoolUser":(OI)(CI)RX

13
投票

我发现解决方案在发布窗口中取消选中“允许预编译的站点可更新”。 enter image description here


10
投票

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


10
投票

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

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

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


7
投票

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


1
投票

以下是我如何使用它:

  1. 在控制面板中,导航到Security Manager> Allow .EXE Files
  2. 将值设置为On(这将允许您上载.exe文件)
  3. 在你的Web.config中,设置完全信任(这将让你运行它们) <configuration> <system.web> <trust level="Full" /> </system.web> </configuration>
  4. 在发布设置中,启用“在发布期间预编译”,但在“高级预编译设置”(此选项旁边的“配置”链接)中,禁用“允许预编译站点可更新”。

1
投票

如果您需要SmarterAsp.Net来上传.exe文件以支持您网站的特性和功能,您可以。只需转到控制面板并启用“允许.Exe文件”,如下所示:

enter image description here

在我的情况下,我必须这样做,因为我想主持一个Asp.Net核心网站,绝对需要一个.exe文件:-)

© www.soinside.com 2019 - 2024. All rights reserved.