tnw*_*tnw 12 c# visual-studio visual-studio-2012
我无法让Visual Studio在发布模式下构建我的项目...它给出了关于程序集错误格式的错误.结果是一些x86程序集被引用而不是x64程序集.程序集,如PresentationCore,System.Data等.
我试过的事情:
调试模式,任何CPU构建都很好.
调试模式,x64构建正常.
发布模式,任何CPU都出现故障
发布模式,x64失败(这就是我想要构建我的项目的组合)
当我尝试删除x86引用并将其切换为x64引用时,问题就出现了.Visual Studio只是添加旧的x86引用而不是x64引用.例如:
我删除了中的System.Data引用 C:\Windows\Microsoft.NET\Framework\v2.0.50727\System.Data.dll
我浏览并添加C:\Windows\Microsoft.NET\Framework64\v2.0.50727\System.Data.dll,但是当我单击该System.Data引用时,路径仍然清除到旧的dll并导致发生相同的错误.这也发生在其他几个DLL上.
有谁知道这个问题的解决方案?
Han*_*ant 18
程序集,如PresentationCore,System.Data等.
我讨厌在没有看到错误消息的情况下回答问题.但这个次要证据足以回答这个问题.首先,这不是一个错误,它是一个警告.它看起来像这样:
警告CS1607:程序集生成 - 引用程序集"System.Data.dll"针对不同的处理器
你还会看到一个mscorlib.dll.和WPF项目中的PresentationCore.dll.这里发生的是这些组件是特殊的,它们是混合模式组件.换句话说,它们包含本机代码和托管代码.本机代码是麻烦制造者,这样的程序集只能用于针对正确处理器风格的项目中.如果你把它混合起来,那么你会在运行时得到一个BadImageFormatException.
这不是.NET程序集的真正问题,您的计算机实际上有两个版本的这些DLL存储在GAC中.如果程序在32位模式下运行而另一个在64位模式下使用,则将使用一个.CLR自动选择正确的一个.
但是,只有一个版本的引用程序集,它存储在c:\ windows\microsoft.net中,并且您传递给编译器以从中读取元数据.它始终是x86版本,没有其他版本,所以不要费心寻找它.同样,这不是问题,编译器只使用引用程序集的元数据,它不执行任何代码.元数据不依赖于程序集的位数.
然而,如果您创建自己的混合模式程序集,这一切都可能是一个问题.您可以轻松忽略提供两个版本的需求.所以编译器担心的是它看到你要求你的项目的AnyCPU或x64版本.但检测到引用程序集只能在您定位x86时才能工作.所以它对你有点尖叫,只是温和地提醒你有一些证据表明你弄错了,并且当你运行它时你的程序可能会因BadImageFormatException而失败.它不会以任何不同于您自己的引用程序集的方式处理框架引用程序集.
所以,功能,而不是一个错误.只是一个警告,否则会阻止您的程序建立.您可以安全地忽略该警告,因为您知道 .NET在运行时在GAC中具有正确的程序集.值得注意的是.NET 4.0没有这个问题,它使用了非常不同的引用程序集,它们没有关闭ILONLY元数据标志.
| 归档时间: |
|
| 查看次数: |
9062 次 |
| 最近记录: |