我正在使用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解决此问题,以便我可以发布我的网站?
答案 0 :(得分:85)
经过几个小时的研究,我找到了解决方案。
自.NET 4.5版本起,Roslyn编译是默认的编译方式。这意味着如果您使用.NET 4.5创建任何Web应用程序Web窗体或MVC,则会在项目中预先安装此Roslyn csc.exe编译。
基本上我需要的是编译和部署没有Roslyn或任何.exe文件的项目。
所以这是适用于我的解决方案。您可以在没有Roslyn的情况下进行部署而无需更改代码:
这将解决您的目的。基本上这不会在bin文件夹中生成任何csc.exe,vbc.exe文件。
我希望它也适合你!
答案 1 :(得分:18)
我在Smarter ASP上遇到过这个问题。在控制面板中的浏览器文件管理器上,导航到bin中的'Roslyn'文件夹并设置.net权限以进行读/写。它当时有效。
答案 2 :(得分:16)
如果你真的想保留roslyn codegen,你只需要在应用程序的bin文件夹中设置权限,以允许ApplicationPool用户阅读&执行。
我使用文件夹属性对话框中的资源管理器“安全”标签执行此操作,但您还应该能够执行以下操作:
icacls PATH_TO_SERVICE_BIN /grant "ApplicationPoolUser":(OI)(CI)RX
答案 3 :(得分:13)
答案 4 :(得分:10)
只需从Web.config中删除codedom部分,就可以解决问题。
答案 5 :(得分:10)
在VS2015中通过Web部署发布ASP.net 4.5.2 SPA时遇到与OP相同的问题。
我找到的解决方案是删除Nuget包" Microsoft.CodeDom.Providers.DotNetCompilerPlatform" 。
您也可以从 Web.config 文件中删除 system.codedom编译器配置部分,该文件具有相同的效果。
答案 6 :(得分:7)
只需在Smarterasp.net文件管理器中设置/bin
文件夹的rw访问权限,如下所示,重新启动应用
答案 7 :(得分:1)
以下是我如何运作:
在Web.config
中,设置完全信任(这将允许您运行它们)
<configuration>
<system.web>
<trust level="Full" />
</system.web>
</configuration>
在您的发布设置中,启用“在发布期间预编译”,但在 高级预编译设置(此选项旁边的配置链接),禁用“允许预编译站点可更新”。
答案 8 :(得分:1)
如果您需要SmarterAsp.Net来上传.exe文件以支持您网站的功能,您可以。只需转到控制面板并打开“#34;允许.Exe文件&#34;见下文:
在我的情况下,我必须这样做,因为我想主持一个Asp.Net核心网站,并且绝对需要一个.exe文件: - )
答案 9 :(得分:0)
我遇到了同样的错误,我通过启用托管目录的权限(读/写/删除)解决了这个问题。
答案 10 :(得分:0)
tl; dr:确保csc.exe的大小不是零字节。
更长的答案
添加另一个原因和解决方案:在我的情况下,我在浏览器中获得了黄色死亡屏幕:
&#39; /&#39;中的服务器错误应用
编译错误
描述:编译资源期间发生错误 需要为此请求提供服务。请查看以下具体内容 错误详细信息并适当修改源代码。
编译器错误消息:编译器失败,错误代码为255。
C:\ Windows \ System32下\ INETSRV&GT; C:\的Inetpub \ wwwroot的\ BIN \罗斯林\ 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
我收到了这个消息框:
后面是CMD窗口中的这一行:
访问被拒绝。
检查Windows文件资源管理器中的文件后,我发现csc.exe的大小为零字节。
我不确定我的部署脚本会发生在哪个阶段,但在将0字节大小的csc.exe替换为实际工作时,一切正常。
答案 11 :(得分:0)
上述解决方案对我不起作用,而且是不正确的,因为这些天罗斯林不是可选的。
有效的方法是确保池帐户对Web应用程序的根文件夹具有读取和执行权限。您可以通过以下步骤找到要授予此权限的帐户:找到您的Web应用程序使用的池名称,然后找到应用程序池-> 池名称 ->高级设置->身份。 / p>
我的VPS主机使用非标准目录进行托管,如下所示:
c:\home\web.app.name\wwwroot
web.app.name 文件夹需要权限。
答案 12 :(得分:0)
将nuget软件包Microsoft.CodeDom.Providers.DotNetCompilerPlatform
更新到最新版本(当时)2.0.1
为我解决了此问题,而不必授予该文件夹许可或删除编译器。
答案 13 :(得分:0)
由于第三方申请,我们遇到了这个问题。 MalwareBytes Anti-Ransomeware实际上是阻止访问的罪魁祸首。解决此问题: