有很多关于&#34的问题;混合模式汇编是针对运行时的版本而构建的,无法在4.0运行时中加载",
E.g。 Mixed mode assembly is built against version 'v1.1.4322'
但是我没有看到任何讨论如何找出引用问题的WHICH引用的dll是混合模式程序集。
这是在旧的.NET 3.5 WinForms + XNA桌面应用程序的升级中发生的,该应用程序包含许多源文件,这些文件引用了各种第三方dll。我不能一次删除一个,因为那时应用程序根本不会构建。
注意:提供"混合模式的项目。"构建期间的错误是一个用VB编写的类库。
(升级到.NET 4.5.2,作为从32位转移到64位的一步。)
即使在添加useLegacyV2RuntimeActivationPolicy="true"
之后,我还没有成功摆脱错误消息,而是花费更多时间来弄清楚为什么不起作用,我想要知道它是哪个dll - 我怀疑我会想用一些更新的解决方案替换有问题的库。
答案 0 :(得分:1)
我解决了这个问题。
Visual Studio 2015 - 工具/选项/项目和解决方案/ 构建并运行
MSBuild项目构建输出详细程度:
详细强>
从输出(Build)中,将所有文本复制粘贴到Notepad ++中。使用" sgen.exe" 查找非常长的行。这本身是值得的,因为显示所有引用的dll及其完整路径。
运行命令提示符,尝试使用" sgen.exe"的变体。 ,省略各种/reference ...
参数。
结果:
可以包括大多数参考,而不会导致"混合模式"错误。
我怀疑的所有第三方dll都不会导致此错误
发现问题是 Microsoft.DirectX。* dll !
FIX:
切换到SharpDX
。
将引用从Microsoft.DirectX.Direct3D
更改为SharpDX.Direct3D11
(或SharpDX.DirectX9
等)
(我稍后会这样做,转到64位;没有意识到我需要这样做只是为了达到.NET 4.5 +)
答案 1 :(得分:0)
我希望有更直接的方法可以从抱怨的消息中找到更多细节;但如果那是不可能的,那么一个答案是对所有dll运行某些东西(例如Peverify.exe
),并检查结果:
How do I find out if a .NET assembly contains unmanaged code?
<强>结果:强>
没有帮助。
大多数dll似乎是托管和非托管的混合,因此这不会缩小问题范围。具体来说,这种方法并没有告诉我所有这些混合dll是否有问题,或者只是其中的一个或几个。