未能加载文件或程序集或它的某一个依赖项(针对资源问题,x86文件在x64上编译失败)

转载 2013年12月03日 11:40:14

在开发中遇到过这样的问题,在x86系统上面可以编译通过的程序,在x64系统上编译出错,提示 未能加载文件或程序集 或它的某一个依赖项,如下图所示:

产生此问题的原因:

先检查确保应该添加的引用都已经添加, 若引用都正常,可能是由于系统环境发生变化引起的,

.resx 文件,属于资源文件 ,由 XML 组成,可以加入任何资源,包括二进制等。


64 位系统上设置编译平台为 x86 的项目编译在特定的情况下比如当一个窗体上放有包含了图像的 ImageList 之后, ResGen 就会产生这种问题。当这个 ImageList 中没有图像时编译也是正常的,但是一旦编译就会引发这样的异常。

这 个错误产生的原因在于, VS2010 内部使用的编译器中,无论是 32 位还是 64 位的编译组件,都是纯 IL 的,也就是在 64 位系统中是以 64 位模式运行,这 与当前项目使用的平台设置无关。当编译的组件引用了一个标记为 x86 的库(仅 32 位模式)时,编译组件便会发生错误,无法加载,从而导致编译失败。

 



解决方案一:

1、在项目上右键, 卸载项目。

2、 编辑项目的 .csproj 文件,在根节点 </Project> 之前加入如下代码:

[html] view plaincopy
  1.  <PropertyGroup>  
  2.     <ForceResGen32Bit Condition="'$(MSBuildToolsVersion)'=='4.0' And '$(PROCESSOR_ARCHITEW6432)'!='' And '$(TargetingClr2Framework)'=='true'   
  3. And '$(PlatformTarget)'=='x86'">true</ForceResGen32Bit>  
  4.   </PropertyGroup>  
  5.   <Target Name="BeforeResGen" Condition="'$(ForceResGen32Bit)' == 'true'">  
  6.     <PropertyGroup>  
  7.       <ResGenSdkToolsPath>$(IntermediateOutputPath)ResGenForced32Bit\</ResGenSdkToolsPath>  
  8.     </PropertyGroup>  
  9.     <!-- Copy resgen.exe to intermediate working directory for UAC settings -->  
  10.     <Copy SourceFiles="$(TargetFrameworkSDKToolsDirectory)ResGen.exe" DestinationFiles="$(ResGenSdkToolsPath)ResGen.exe" />  
  11.     <!-- corflags.exe resgen.exe /32BIT+ /Force-->  
  12.     <Exec WorkingDirectory="$(ResGenSdkToolsPath)" Command=""$(TargetFrameworkSDKToolsDirectory)corflags.exe" ResGen.exe /32BIT+ /Force" />  
  13.     <!-- GenerateResource Task parameters  
  14.         Using the non-64bit Tracker.exe and indicate resgen.exe has been forced to x86 -->  
  15.     <PropertyGroup>  
  16.       <ResGenTrackerSdkPath>$(SDK40ToolsPath)</ResGenTrackerSdkPath>  
  17.       <ResGenToolArchitecture>Managed32Bit</ResGenToolArchitecture>  
  18.       <CacheTargetFrameworkSDKToolsDirectory>$(TargetFrameworkSDKToolsDirectory)</CacheTargetFrameworkSDKToolsDirectory>  
  19.       <TargetFrameworkSDKToolsDirectory>$(ResGenSdkToolsPath)</TargetFrameworkSDKToolsDirectory>  
  20.     </PropertyGroup>  
  21.   </Target>  
  22.   <Target Name="AfterResGen" Condition="'$(ForceResGen32Bit)' == 'true'">  
  23.     <PropertyGroup>  
  24.       <TargetFrameworkSDKToolsDirectory>$(CacheTargetFrameworkSDKToolsDirectory)</TargetFrameworkSDKToolsDirectory>  
  25.     </PropertyGroup>  
  26.     <RemoveDir Directories="$(ResGenSdkToolsPath)" Condition="Exists('$(ResGenSdkToolsPath)')" />  
  27.   </Target>  

3、保存后,重新编译项目,编译通过。

 

 解决方案二:

将此项目的编译目标框架设为 .Net Framewrok4.0 或者更高框架即可编译通过。

 

关于此问题的 MicroSoft 官方网址为:

http://support.microsoft.com/kb/2028833

相关文章推荐

未能加载文件或程序集或它的某一个依赖项(针对资源问题,x86文件在x64上编译失败)

在开发中遇到过这样的问题,在x86系统上面可以编译通过的程序,在x64系统上编译出错,提示 未能加载文件或程序集 或它的某一个依赖项,如下图所示: 产生此问题的原因: 64 位系统上设置编译...

未能加载文件或程序集“AspNetPager”或它的某一个依赖项。参数错误。 (异常来自 HRESULT:0x80070057 (E_INVALIDARG))

刚才,本来在写代码,无聊直接,打开QQ音乐,打算放点music,结果电脑卡死了,直接黑屏重启了。当我重启完电脑,重新打开VS时,悲剧的发现程序出错。奇怪的是,生成项目确实通过的。报错信息 "未能加载...
  • lp0219
  • lp0219
  • 2014年11月22日 21:54
  • 698

未能加载文件或程序集“SMSWeb”或它的某一个依赖项。磁盘空间不足。 (异常来自 HRESULT:0x80070070)

未能加载文件或程序集“SMSWeb”或它的某一个依赖项。磁盘空间不足。 (异常来自 HRESULT:0x80070070)说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信...

机房重构所遇问题"未能加载文件或程序集“DAL”或它的某一个依赖项。系统找不到指定的文件"的解决办法集锦

未能加载文件或程序集“DAL”或它的某一个依赖项,系统找不到指定的文件;如何关闭VS的”使用调试器调试“的提示;源文件与模块生成时的文件不同...

未能加载文件或程序集“MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项...

未能加载文件或程序集“MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项。系统...
  • Joyhen
  • Joyhen
  • 2016年04月26日 15:10
  • 1366

异常:未能加载文件或程序集”DAL”或它的某一个依赖项——解决办法

下面是我再使用抽象工厂+反射重构机房时,在Factoy中出现了下面一个问题: 去网上查了一下资料,发现这是一个很普遍的问题,它出现的原因主要有两种: 第一种: 加载DLL路径错误。解决办法是调整D层...
  • zjx86320
  • zjx86320
  • 2014年05月16日 17:34
  • 10820

mvc4源码调试“未能加载文件或程序集“System.Web.Mvc”或它的某一个依赖项。未能验证强名称签名。解决办法

环境vs2015+win7x64+.net 4.5 system.web.mvc中版本改成4.0.0.1 个人测试mvc项目中根目录web.config改                  ...

未能加载文件或程序集“DocumentFormat.OpenXml”或它的某一个依赖项。

昨天电脑过热自己关机了,也没理,今天来了开机启动项目报如下错误: 未能加载文件或程序集“DocumentFormat.OpenXml”或它的某一个依赖项。参数错误。 (异常来自 HRESULT:...

未能加载文件或程序集“XXX”或它的某一个依赖项。磁盘空间不足---解决方案

今天网站突然报错说是磁盘已满,如图错误: 刚开始以为是数据库日志导致的磁盘满了,看了一眼磁盘还有很大空间,应该不是。又看了一眼网站服务器C盘 靠 他居然满了。。。。最后查明是iis产生的日志 把C...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:未能加载文件或程序集或它的某一个依赖项(针对资源问题,x86文件在x64上编译失败)
举报原因:
原因补充:

(最多只允许输入30个字)