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

时间:2016-02-03 18:05:43

标签: 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解决此问题,以便我可以发布我的网站?

14 个答案:

答案 0 :(得分:85)

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

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

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

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

  1. 打开NuGet包管理器窗口
  2. 卸载 Microsoft.CodeDom.Providers.DotNetCompilerPlatform 打包并重建&重新发布。 (此卸载还会从web.config文件中删除CodeDom配置。)
  3. 这将解决您的目的。基本上这不会在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)

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

答案 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访问权限,如下所示,重新启动应用

See this image for details

答案 7 :(得分:1)

以下是我如何运作:

  1. 在控制台中,导航至Security Manager>允许.EXE文件
  2. 将值设置为On(这将允许您上传.exe文件)
  3. Web.config中,设置完全信任(这将允许您运行它们)

    <configuration> 
      <system.web> 
        <trust level="Full" /> 
      </system.web> 
    </configuration> 
    
  4. 在您的发布设置中,启用“在发布期间预编译”,但在 高级预编译设置(此选项旁边的配置链接),禁用“允许预编译站点可更新”。

答案 8 :(得分:1)

如果您需要SmarterAsp.Net来上传.exe文件以支持您网站的功能,您可以。只需转到控制面板并打开“#34;允许.Exe文件&#34;见下文:

enter image description here

在我的情况下,我必须这样做,因为我想主持一个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

我收到了这个消息框:

enter image description here

后面是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实际上是阻止访问的罪魁祸首。解决此问题:

  • 右键单击MaltraBytes Anti-Ransomeware(不是反利用)的系统托盘图标
  • 停止保护