C# 为什么App_GlobalResources为x86编译,即使使用;启用32位应用程序”;在IIS中设置为false?
我正在处理的web应用程序有三个x86依赖项:C# 为什么App_GlobalResources为x86编译,即使使用;启用32位应用程序”;在IIS中设置为false?,c#,asp.net,.net,iis,C#,Asp.net,.net,Iis,我正在处理的web应用程序有三个x86依赖项: Crystal报告32位运行时 一个古老的自制数据实用程序库 一个古老的本地日志库 我在登台服务器和本地计算机上执行了以下操作: 删除32位CR运行时并安装64位 反编译了两个自制的库,并将所需的代码放在web应用程序中(并删除了对这两个程序集的引用) 在IIS中的应用程序池上将“启用32位应用程序”设置为false web应用程序现在具有64位依赖项(Lync UCMA SDK),因此需要删除32位依赖项。问题是,现在我从浏览器中的IIS
- Crystal报告32位运行时
- 一个古老的自制数据实用程序库
- 一个古老的本地日志库
- 删除32位CR运行时并安装64位
- 反编译了两个自制的库,并将所需的代码放在web应用程序中(并删除了对这两个程序集的引用)
- 在IIS中的应用程序池上将“启用32位应用程序”设置为false
aspnet\u compile
,则从命令行收到以下消息:
无法加载文件或程序集
'file:///C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary
ASP.NET文件\root\6b69372f\fdfe0d46\App_GlobalResources.melxzfvs.dll'
或者它的一个依赖项。试图加载带有的程序
格式不正确
我在试图解决此问题时尝试了以下操作:
- 清除存在该dll的ASP.NET临时文件
- 正在运行aspnet\u regais-i(64位版本)
- 将项目配置设置为x64而不是“任何CPU”
aspnet_compile
显然正在运行。bin文件夹中的每个其他程序集都是“任意CPU”
我能做些什么使它为x64编译
编辑:
如果我删除App_GlobalResources文件夹,ASP.NET编译器会继续抱怨,但现在是关于App_Code.dll的。同样的问题。在对.csproj和Web.config文件进行了一些繁琐的并行比较之后,我确定Web.config中的以下部分是罪魁祸首:
<system.codedom>
<compilers>
<compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CSharp.CSharpCodeProvider, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" compilerOptions="/unsafe /platform:x86" warningLevel="1">
<providerOption name="CompilerVersion" value="v4.0" />
<providerOption name="WarnAsError" value="false" />
</compiler>
</compilers>
</system.codedom>
删除此部分后,App_代码、App_GlobalResources及其亲属都为“任何CPU”编译。可能尝试通过执行
aspnet_regiis-u
然后aspnet_regiis-i
然后aspnet_regiis-c
来显式卸载和重新安装脚本。值得一试,我想,也可以尝试一个新的应用程序池。从32位和64位目录运行卸载,然后仅从64位安装并重新启动IIS;不,不幸的是,luckI不能重现这个问题。如果您能够在dev服务器上运行,可以删除32位版本的.NET的ISAPI过滤器,看看它是否可以帮助您分类问题。可能有点激烈,但可能有助于找出问题所在。我刚刚检查了另一个web应用程序,它的App_代码和App_全局被编译为“任意CPU”,而像这样的项目文件被编译为“x86”,无论是在发布配置文件上带有预编译的Visual Studio中,还是在关闭预编译后的IIS中。我猜这是旧网站项目的残余。大约一年前,当我们将其转换为一个web应用程序项目时,我们可能将这一点与其他内容一起从旧配置中复制过来。