Можно условно ссылаться на каждый файл .dll, соответствующий вашей активной конфигурации сборки. Вам нужно будет вручную отредактировать файл вашего проекта. Добавьте ссылку на 32-битную DLL. Затем сохраните проект и отредактируйте файл .csproj в текстовом редакторе.
Найдите добавленную вами ссылку и добавьте Condition = "$ (Platform) == 'x86'" в качестве атрибута элемента Reference. Затем сделайте еще одну копию элемента Reference и настройте его для версии x64. Вот пример с драйверами Oracle ODP.NET:
<Reference Include="Oracle.DataAccess, Version=2.111.6.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=AMD64" Condition="$(Platform) == 'x64'">
<SpecificVersion>False</SpecificVersion>
<HintPath>lib\x64\Oracle.DataAccess.dll</HintPath>
<Private>True</Private>
</Reference>
<Reference Include="Oracle.DataAccess, Version=2.111.6.0, Culture=neutral, PublicKeyToken=89b483f429c47342, processorArchitecture=x86" Condition="$(Platform) == 'x86'">
<SpecificVersion>False</SpecificVersion>
<HintPath>lib\x86\Oracle.DataAccess.dll</HintPath>
<Private>True</Private>
</Reference>
Важно отметить, что вы больше не сможете использовать конфигурацию AnyCPU. Вам нужно будет иметь явные конфигурации сборки для x86 или x64. .Dll, которую вы пытаетесь использовать, вероятно, выполняет собственные вызовы в библиотеки ОС, поэтому ваш проект больше не может быть независимым от платформы.
Если вы хотите сохранить только одну конфигурацию сборки, вы можете использовать x86 и использовать только версию x86 / 32-bit. Если это веб-приложение, вам нужно перевести пул приложений в 32-разрядный режим.
Отредактировано, чтобы ответить на ваши первоначальные вопросы
- У вас есть несколько опций платформы, когда вы создаете dll / исполняемый файл: любой процессор, x86, x64 или Itanium. Код, который написан на 100% в управляемом коде и не зависит от собственных библиотек, обычно компилируется и распространяется как AnyCPU. Это связано с тем, что полученный в результате код промежуточного языка (IL), сгенерированный компилятором, может работать в версиях .NET Framework x86, x64 и Itanium. На библиотеки, предназначенные для любого ЦП, можно безопасно ссылаться из приложений, которые зависят от платформы (x86, x64, IA64). Причина, по которой PresentationCore и WindowsBase различаются, заключается в том, что они зависят от собственного кода. В отличие от IL-кода, который интерпретируется во время выполнения, в нативном коде нет концепции Any CPU. Из-за зависимостей собственного кода библиотеки PresentationCore и WindowsBase .NET необходимо было распространять как x86 и x64, поскольку AnyCPU невозможно.
- В диалоговом окне «Добавить ссылку» должны отображаться только библиотеки, совместимые с целевой платформой. Если вашей целевой платформой является x86, она должна показывать только любые библиотеки CPU и x86.
- К сожалению, нет. Если вы не можете использовать какой-либо ЦП, но по-прежнему должны поддерживать x86 и x64, вам нужно настроить несколько конфигураций сборки (одну для x86 и одну для x64) и условно ссылаться на 32-битные и 64-битные dll, которые вам нужны. Единственный способ сделать это - отредактировать файл проекта, как описано выше. Вам нужно будет создать обе конфигурации и распространять отдельные 32-битные и 64-битные версии вашего кода. Если кто-то зависит от вашего кода, ему нужно будет прыгать через те же обручи.