C# 为什么App_GlobalResources为x86编译,即使使用;启用32位应用程序”;在IIS中设置为false?

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

我正在处理的web应用程序有三个x86依赖项:

  • Crystal报告32位运行时
  • 一个古老的自制数据实用程序库
  • 一个古老的本地日志库
我在登台服务器和本地计算机上执行了以下操作:

  • 删除32位CR运行时并安装64位
  • 反编译了两个自制的库,并将所需的代码放在web应用程序中(并删除了对这两个程序集的引用)
  • 在IIS中的应用程序池上将“启用32位应用程序”设置为false
web应用程序现在具有64位依赖项(Lync UCMA SDK),因此需要删除32位依赖项。问题是,现在我从浏览器中的IIS收到以下消息,如果我尝试手动使用
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”
在Telerik JustDecompile之类的工具中查看App_GlobalResources dll表明该dll是专门为x86平台编译的,尽管64位版本的
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应用程序项目时,我们可能将这一点与其他内容一起从旧配置中复制过来。