【发布时间】:2014-02-03 10:21:43
【问题描述】:
我在编译托管 DLL 项目时遇到问题。该解决方案由两个项目组成,第一个是用 C# 编写的 .NET DLL,另一个是直接引用 C# 项目的托管 C++ DLL。
两个项目/DLL 都使用磁盘上的 snk 文件强命名。 C# dll 的目标框架为"AnyCPU",而 Manage C++ 项目编译两次,一次用于 x86 目标,另一次用于 x64。
我的问题是,当我编译托管 C++ 项目以针对 x86 平台时,结果 DLL 具有 PublicKeyToken = null 报告的 ILSpy。在针对 x64 平台进行编译时,DLL 具有正确的 PublicKeyToken。我检查了我的项目属性,Configuration Properties -> Linker->Advanced->Key File 下的两个平台目标都正确引用了 snk 文件,没有延迟签名; Target Machine 选项也根据所需的编译目标正确设置。
这是我加载 DLL 时 ILSpy 显示的信息。
对于 x64 dll:
// MyDll.x64, Version=1.1.1000.1, Culture=neutral, PublicKeyToken=XXXXXXXXX
// Architecture: x64
// This assembly contains unmanaged code.
// Runtime: .NET 2.0
对于 x86 dll:
// MyDll.x86, Version=1.1.1000.1, Culture=neutral, PublicKeyToken=null
// Architecture: AnyCPU (64-bit preferred)
// This assembly contains unmanaged code.
// Runtime: .NET 2.0
我关心的是 x86 程序集的体系结构描述:AnyCPU (64-bit preferred)
我不确定它为什么使用 AnyCPU 配置以及 64 位首选注释的确切含义?
我还想提一下,我的项目是针对 C# 项目的 .NET Framwork 2.0 构建的,而托管 c++ 项目是针对 v90 平台工具集构建的。我正在使用在 Windows 7 64 位机器上运行的 Visual Studio 2010。
谁能告诉我为什么会这样,我该如何解决这个问题?
【问题讨论】:
-
尝试启用 MSBuild 日志记录,然后您可能会发现。
标签: c# .net visual-studio-2010 strongname