Использование DLL PresentationCore и WindowsBase в средах x64 и x86

PresentationCore.dll и WindowsBase.dll включены в Microsoft .NET Framework 3.0, а две версии каждой dll устанавливаются на диск:

  • Версия x64 в папке C: \ Program Files \ Reference Assemblies \ Microsoft \ Framework \ v3.0
  • Версия x86 в папке C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ v3.0

До добавления ссылок на эти dll наше веб-приложение ASP.NET можно было скомпилировать для «любого процессора» и без проблем работать в 32-битном или 64-битном режиме. После добавления ссылки, скажем, на PresentationCore через стандартный диалог «Добавить ссылку» (Добавить ссылку -> .NET -> PresentationCore), веб-приложение не работает в 64-битном режиме со следующей ошибкой:

Не удалось загрузить файл или сборка PresentationCore или одна из ее зависимостей. Была сделана попытка загрузить программу с неверным форматом.

Очевидно, это связано с тем, что пул 64-битных приложений пытается загрузить 32-битную версию библиотеки PresentationCore, но безуспешно.

Меня это немного смущает ...

  1. Другие библиотеки DLL .NET Framework, похоже, легко переключаются между своей версией x64 и x86 (загрузка из Microsoft.NET/Framework64 или Microsoft.NET/Framework соответственно ). Почему PresentationCore и WindowsBase отличаются?
  2. Почему Visual Studio, похоже, предлагает мне только 32-разрядную версию на вкладке «.NET» в диалоговом окне «Добавить ссылку»? Если мне нужна 64-битная версия, я должен ее найти.
  3. Есть ли какой-нибудь простой способ автоматически выбирать правильную dll, как это, кажется, происходит с другими библиотеками .NET Framework?

Мы всегда можем написать немного MSBuild xml, который будет автоматически менять местами ссылки во время сборки на основе разрядность целевой среды, но похоже, что это то, что нам не нужно делать для библиотек DLL .NET Framework. Что дает?

Спасибо!

5
задан David Mills 6 December 2011 в 22:32
поделиться