У меня возникла проблема при компиляции управляемого DLL-проекта. Решение состоит из двух проектов: первая - это .NET DLL, написанная на C#, а другая - управляемая C++ DLL, которая напрямую ссылается на проект C#.null PublicKeyToken для сборки x86
Оба проекта/библиотеки DLL сильно названы файлом snk на диске. C# dll имеет целевую структуру "AnyCPU"
, а проект Manage C++ скомпилирован дважды, один для целевой x86, а другой для x64.
Моя проблема заключается в том, что когда я компилирую проект Managed C++ для таргетинга на платформу x86, DLL результатов имеет PublicKeyToken = null
, как сообщается ILSpy
. При компиляции для целевой платформы x64 в DLL есть правильный PublicKeyToken. Я проверил свойства проекта, файл snk правильно ссылается для обеих целевых платформ под Configuration Properties -> Linker->Advanced->Key File
без фиксации задержки; опция Target Machine
также установлена правильно на основе желаемой цели компиляции.
Вот информация, показанная ILSpy при загрузке моей DLL.
Для 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-битная предпочтительная аннотация?
Я также хотел бы упомянуть, что мой проект построен против .NET Framwork 2.0 для проекта C#, а проект Managed C++ построен против набора инструментов V90 Platform Toolset. Я использую Visual Studio 2010, работающую на 64-разрядной машине Windows 7.
Может кто-нибудь сказать мне, почему это происходит и как я могу решить эту проблему?
Попробуйте включить ведение журнала MSBuild, а затем вы можете узнать об этом. –