У меня проблема при компиляции управляемого проекта DLL. Решение состоит из двух проектов: первый - это .NET DLL, написанный на C #, а другой - это управляемая C ++ DLL, которая напрямую ссылается на проект C #.
Оба проекта / библиотеки 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.
Может кто-нибудь сказать мне, почему это происходит и как я могу решить эту проблему?