Загрузка различных сборок во время компиляции на основе цели сборки - PullRequest
5 голосов
/ 28 января 2009

Я хочу загрузить одну из четырех отдельных сборок C # в зависимости от цели сборки. Это входит в веб-сервис с .net Framework 3.0.

возможности:

32-разрядная отладка: AmtApiWrapper32d.dll

32-разрядная версия: AmtApiWrapper32.dll

64-разрядная отладка: AmtApiWrapper64d.dll

64-разрядная версия: AmtApiWrapper64.dll

Эти обертки - это отдельный проект C ++, который оборачивает написанную мной C-DLL. C / C ++ - моя обычная платформа, поэтому извините, если это вопрос.

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

Итак, я хочу загрузить один из них во время компиляции. Я просмотрел такие вещи, как отражение, GetDelegateForFunctionPointer и некоторые другие, и все они кажутся похожими, но слишком сложными для этой простой задачи. Какие-либо предложения? БЛАГОДАРЯ

Ответы [ 2 ]

6 голосов
/ 29 января 2009

Это определенно возможно, но вам придется вбраться в файл сборки.

Вы бы хотели что-то вроде:

<ItemGroup Condition=" '$(Configuration)' == '32-bit debug' ">
  <Reference Include="AmtApiWrapper32d">
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)' == '32-bit release' ">
  <Reference Include="AmtApiWrapper32">
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)' == '64-bit debug' ">
  <Reference Include="AmtApiWrapper64d">
</ItemGroup>
<ItemGroup Condition=" '$(Configuration)' == '64-bit release' ">
  <Reference Include="AmtApiWrapper64">
</ItemGroup>

Я предлагаю вам безоговорочно заставить один из них работать, а затем посмотреть, как именно выглядит ссылка.

Это если вы хотите добавить его как ссылку на время сборки. Если вы хотите использовать его в объявлении P / Invoke, просто используйте #if SYMBOL / #endif вокруг соответствующего атрибута.

0 голосов
/ 29 января 2009

Вы пытались использовать директивы прекомпилятора и определять различные переменные в цели сборки?

т.е.

#ifdef 32bdebug
<load dll here>
#endif

Прошло немного времени с тех пор, как я использовал C #, но это должно работать во время компиляции. Это один из C #, взятый из C и C ++.

...