C# 在smarterasp.net上发布包含csc.exe文件的网站时出现问题?
我正在使用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”C# 在smarterasp.net上发布包含csc.exe文件的网站时出现问题?,c#,asp.net,visual-studio-2015,C#,Asp.net,Visual Studio 2015,我正在使用Microsoft Visual Studio 2015,我创建了一个带有C#联系人表单的简单网站。 当我在localhost上编译和运行时,它工作得非常好。但是,当我尝试发布它(在smarterasp.net上)时,我得到了一个错误: [Win32Exception(0x80004005):访问被拒绝] [ExternalException(0x80004005):无法执行程序。正在执行的命令为“.\bin\roslyn\csc.exe” 我已联系smarterasp.net,他们说
我如何使用csc.exe解决这个问题,它正试图包含在我的项目中,这样我就可以发布我的网站了?经过几个小时的研究,我找到了解决方案 自.NET 4.5版本以来,Roslyn编译是默认的编译方式。这意味着如果您使用.NET 4.5创建任何web应用程序,无论是web窗体还是MVC,您都可以在项目中预先安装此Roslyn csc.exe编译 基本上,我需要的是在没有Roslyn或任何.exe文件的情况下编译和部署我的项目 这是一个适合我的解决方案。您可以在没有Roslyn的情况下部署,而无需更改代码:
我希望它也适用于您!如果您真的想保留roslyn codegen,您只需要设置应用程序的bin文件夹的权限,以允许ApplicationPool用户读取和执行 我使用“文件夹属性”对话框上的“资源管理器安全”选项卡完成了此操作,但您还应该能够执行以下操作:
icacls PATH_TO_SERVICE_BIN /grant "ApplicationPoolUser":(OI)(CI)RX
下面是我如何让它工作的:
Web.config
中,设置完全信任(这将允许您运行它们)
我发现这个解决方案在发布窗口中没有选中“允许预编译的站点可更新”。
只需从Web.config中删除codedom部分,这就解决了问题。在VS2015中通过Web deploy发布ASP.net 4.5.2 SPA时遇到了与OP相同的问题 我发现有效的解决方案是删除Nuget包“Microsoft.CodeDom.Providers.DotNetCompilerPlatform”
或者,您也可以从Web.config文件中删除system.codedom compiler config部分,这也会产生同样的影响。我在Smarter ASP上遇到过这个问题。在控制面板的浏览器文件管理器上,导航到bin中的“Roslyn”文件夹,并设置.net读/写权限。它我也遇到了同样的错误,我通过启用托管目录的权限(读/写/删除)解决了这个问题。如果您需要SmarterAsp.Net来允许上载.exe文件以支持您网站的功能和功能,您可以。只需转到控制面板并打开“允许.exe文件”即可,请参见以下内容:
在我的情况下,我必须这样做,因为我想托管一个Asp.Net核心网站,这绝对需要一个.exe文件:-)只需在Smarterasp.Net文件管理器中为
/bin
文件夹设置rw访问权限,如下所示,重新启动应用程序
tl;dr:确保csc.exe的大小不是零字节
更长的答案 再加上另一个原因和解决方案:在我的情况下,我在浏览器中看到了死亡的黄色屏幕: “/”应用程序中出现服务器错误 编译错误 描述:编译资源时出错 服务此请求所必需的。请查看以下具体内容 错误详细信息,并适当修改源代码 编译器错误消息:编译器失败,错误代码为255 c:\windows\system32\inetsrv>c:\inetpub\wwwroot\bin\roslyn\csc.exe /t:library/utf8output/nostlib+ 版本信息:Microsoft.NET Framework版本:4.0.30319; ASP.NET版本:4.7.2558.0 经过调查,我通过在CMD窗口中执行csc.exe来隔离对csc.exe的调用:
c:\inetpub\wwwroot\bin\roslyn\csc.exe
我收到了这个留言框:
在CMD窗口中紧跟这一行:
c:\inetpub\wwwroot\bin\roslyn\csc.exe
访问被拒绝
在检查Windows文件资源管理器中的文件时,我发现csc.exe的大小为零字节
我不确定在部署脚本的哪个阶段会发生这种情况,但在用实际工作的csc.exe替换0字节大小的csc.exe后,一切都正常工作。上述解决方案对我不起作用,也不正确,因为roslyn现在不是可选的 有效的方法是确保池帐户对web应用程序的根文件夹具有读取和执行权限。通过查找web应用程序使用的池名称,然后查找应用程序池->池名称->高级设置->标识,可以找到要授予此权限的帐户 我的VPS主机使用非标准目录进行托管,如下所示:
c:\home\web.app.name\wwwroot
web.app.name文件夹需要该权限。更新nuget软件包
Microsoft.CodeDom.Provider