这是我的第一个问题,如果我有语法错误,请向我道歉。
问题描述:
我有基于32位MVC 5的CRUD系统运行在IIS7 (Windows 2008)和Server 2008 R2上,安装在多个服务器上,自2015年8月以来提供公司内部网管理服务。几个月来,他们都顺利地运行,没有任何问题。然而,昨天我发现我无法使用以下消息访问172.16.1.101服务器上的站点根页面:
> Server Error in '/' Application.
> [Win32Exception (0x80004005): Access is denied]
>[ExternalException (0x80004005): Cannot execute a program. The command being executed was "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" /noconfig /fullpaths @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\-(random 8-digit hex)-\-(random 8-digit hex)-\-(random 8-char base64).cmdline".]
System.CodeDom.Compiler.Executor.ExecWaitWithCaptureUnimpersonated(SafeUserTokenHandle userToken, String cmd, String currentDir, TempFileCollection tempFiles, String& outputName, String& errorName, String trueCmdLine) +3365
System.CodeDom.Compiler.Executor.ExecWaitWithCapture(SafeUserTokenHandle userToken, String cmd, String currentDir, TempFileCollection tempFiles, String& outputName, String& errorName, String trueCmdLine) +8591876
Microsoft.CSharp.CSharpCodeGenerator.Compile(CompilerParameters options, String compilerDirectory, String compilerExe, String arguments, String& outputFile, Int32& nativeReturnValue, String trueArgs) +331
Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames) +784
Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromFileBatch(CompilerParameters options, String[] fileNames) +170
System.Web.Compilation.AssemblyBuilder.Compile() +12440424
System.Web.Compilation.BuildProvidersCompiler.PerformBuild() +303
System.Web.Compilation.ApplicationBuildProvider.GetGlobalAsaxBuildResult(Boolean isPrecompiledApp) +12978145
System.Web.Compilation.BuildManager.CompileGlobalAsax() +50
System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +665
>[HttpException (0x80004005): Cannot execute a program. The command being executed was "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" /noconfig /fullpaths @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\-(random 8-digit hex)-\-(random 8-digit hex)-\-(random 8-char base64)-.cmdline".]
System.Web.Compilation.BuildManager.ReportTopLevelCompilationException() +80
System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled() +1142
System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +1193
>[HttpException (0x80004005): Cannot execute a program. The command being executed was "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" /noconfig /fullpaths @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\-(random 8-digit hex)-\-(random 8-digit hex)-\-(random 8-char base64)-.cmdline".]
System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +12980692
System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +159
System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +12820285
以下是发生异常时的事件日志:
>IIS 7 Event Log
>Event code: 3005
>Event message: An unhandled exception has occurred.
>Event time: 5/24/2016 1:42:08 PM
>Event time (UTC): 5/24/2016 6:42:08 AM
>Event ID: 062751a2dc724be9af5de99014e58a47
>Event sequence: 2
>Event occurrence: 1
>Event detail code: 0
>Application information:
>Application domain: /LM/W3SVC/3/ROOT-1-131085457263004464
>Trust level: Full
>Application Virtual Path: /
>Application Path: E:\Test\
>Machine name: -- edited --
>Process information:
>Process ID: 1172
>Process name: w3wp.exe
>Account name: IIS APPPOOL\ASP.NET v4.0
>Exception information:
>Exception type: HttpException
>Exception message: Cannot execute a program. The command being executed was "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" /noconfig /fullpaths @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\-(random 8-digit hex)-\-(random 8-digit hex)-\-(random 8-char base64)-.cmdline".
at System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
at System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()
at System.Web.Compilation.BuildManager.CallAppInitializeMethod()
at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)
>Cannot execute a program. The command being executed was "C:\Windows\Microsoft.NET\Framework\v4.0.30319\csc.exe" /noconfig /fullpaths @"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files\root\-(random 8-digit hex)-\-(random 8-digit hex)-\-(random 8-char base64).cmdline".
at System.CodeDom.Compiler.Executor.ExecWaitWithCaptureUnimpersonated(SafeUserTokenHandle userToken, String cmd, String currentDir, TempFileCollection tempFiles, String& outputName, String& errorName, String trueCmdLine)
at System.CodeDom.Compiler.Executor.ExecWaitWithCapture(SafeUserTokenHandle userToken, String cmd, String currentDir, TempFileCollection tempFiles, String& outputName, String& errorName, String trueCmdLine)
at Microsoft.CSharp.CSharpCodeGenerator.Compile(CompilerParameters options, String compilerDirectory, String compilerExe, String arguments, String& outputFile, Int32& nativeReturnValue, String trueArgs)
at Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames)
at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromFileBatch(CompilerParameters options, String[] fileNames)
at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromFile(CompilerParameters options, String[] fileNames)
at System.Web.Compilation.AssemblyBuilder.Compile()
at System.Web.Compilation.BuildProvidersCompiler.<PerformBuild>b__1(AssemblyBuilder assemblyBuilder)
at System.Threading.Tasks.Parallel.<>c__DisplayClass32`2.<PartitionerForEachWorker>b__30()
at System.Threading.Tasks.Task.InnerInvoke()
at System.Threading.Tasks.Task.InnerInvokeWithArg(Task childTask)
at System.Threading.Tasks.Task.<>c__DisplayClass11.<ExecuteSelfReplicating>b__10(Object param0)
--- End of stack trace from previous location where exception was thrown ---
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Web.Compilation.BuildProvidersCompiler.PerformBuild()
at System.Web.Compilation.CodeDirectoryCompiler.GetCodeDirectoryAssembly(VirtualPath virtualDir, CodeDirectoryType dirType, String assemblyName, StringSet excludedSubdirectories, Boolean isDirectoryAllowed)
at System.Web.Compilation.BuildManager.CompileCodeDirectory(VirtualPath virtualDir, CodeDirectoryType dirType, String assemblyName, StringSet excludedSubdirectories)
at System.Web.Compilation.BuildManager.CompileResourcesDirectory()
at System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()
>Access is denied
>Request information:
>Request URL: //172.16.1.101/
>Request path: /
>User host address: //172.16.1.101
>User:
>Is authenticated: False
>Authentication Type:
>Thread account name: IIS APPPOOL\ASP.NET v4.0
>Thread information:
>Thread ID: 5
>Thread account name: IIS APPPOOL\ASP.NET v4.0
>Is impersonating: True
>Stack trace: at >System.Web.Compilation.BuildManager.ReportTopLevelCompilationException()
at System.Web.Compilation.BuildManager.EnsureTopLevelFilesCompiled()
at System.Web.Compilation.BuildManager.CallAppInitializeMethod()
at System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException)
>Custom event details:
有时消息显示\临时ASP.NET文件\tls目录,而不是\临时ASP.NET文件\根目录。
IIS 7服务器配置为默认状态和单个池,默认情况下不运行任何web服务(只有基本配置),包括XML (反)序列化程序。
主要认为我在IIS系统帐户上有权限错误,我已经完成了将权限设置为“完全控制”,但没有成功。
因此,希望根据消息在服务器端编译缺少的文件,尝试通过以下命令在CMD上手动编译cmdline文件。
@"C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary csc.exe /noconfig /fullpaths ASP.NET Files\root-(随机8位十六进制)--(随机8位十六进制)-(随机8-char base64).cmdline“
提供错误:
致命错误CS2021:文件名CS2021 ASP.NET ASP.NET\root-(随机8位十六进制)--(随机8位十六进制)--(随机8-字符base64).cmdline‘太长或无效 错误CS2011:错误打开响应文件'c:\Windows\Microsoft.NET\Framework\v4.0.30319\root-(random 8位十六进制-- (随机8位十六进制)--(随机8位base64).cmdline‘--“系统找不到指定的文件。”
不放弃,我对这个问题进行了谷歌搜索,并在上面发现了相关的类似问题:
Problems publishing a website on smarterasp.net with csc.exe file included?
但是,在为活动服务器实现编译项目时,我既没有安装"Microsoft.CodeDom.Providers.DotNetCompilerPlatform“包,也没有使用SOAP,而且在web.config上已经有了”identity impersonate=“”true“属性,但没有效果。
接下来,我用"Advanced“选项配置了与站点对应的IIS应用程序池,将标识部分从"ApplicationPoolIdentity”更改为"LocalSystem“,有趣的是,访问根页面的YSOD消失了。我试着把它改回"ApplicationPoolIdentity“,而YSOD却掉头了。
即使LocalSystem身份暂时解决了这个问题,我仍然好奇为什么错误发生时没有任何系统故障的迹象。我想在此提出两个问题:
tl;dr:IIS7服务器上的默认配置的ApplicationPoolIdentity直到昨天才开始工作,直到昨天我在一台既没有应用XML序列化程序也没有应用web服务的服务器上遇到了YSOD,请帮助我详细解释或描述服务器上已经发生的问题以及缓解问题的方法。
PS:书面目录路径上的"-“和"--”符号应该替换为"\“。
发布于 2017-04-21 16:32:00
从nuget包卸载DotNetCompilerPlatform
发布于 2019-05-07 15:23:39
在我的示例中,向本地帐户"IIS_IUSRS“添加权限,以便在web应用程序运行的目录下读取和执行该问题。
发布于 2019-11-27 09:46:20
在我的网站托管上,它帮助我从web.config中删除了这个部分:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:default /nowarn:1659;1699;1701"/>
<compiler language="vb;vbs;visualbasic;vbscript" extension=".vb"
type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=2.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
warningLevel="4" compilerOptions="/langversion:default /nowarn:41008 /define:_MYTYPE=\"Web\" /optionInfer+"/>
</compilers>
</system.codedom>
https://stackoverflow.com/questions/37427195
复制相似问题