Вопрос

В настоящее время я пишу Snapin PowerShell, который имеет определенные зависимости от смешано-монтажных узлов (сборки, содержащий нативный код), который специально предназначен для X64 или X86. У меня есть оба версии зависимой сборки, но мне интересно, как лучше всего управлять сборкой и развертыванием этого визина, в частности:

  1. Нужно ли иметь две версии Snapin, один x86 и один x64 и используйте две разные версии installutil для установки его, один раз для каждой архитектуры?
  2. Предполагая, что № 1 верно, рекомендуется ли установить две разные версии Snapin в различных «программных файлах» и «программных файлах (X86)» каталогов?
  3. Какой идеал (наименее хлопот) способ структурировать пару проектов, которые разделяют все, кроме единой ссылки, чтобы построить для двух разных архитектур?
  4. Если Snapin скомпилирован как «AnyCPU», и зависимые DLL, которые оба загружаются в GAC, будет нагрузка за выполнением правильной сборки из GAC на основе архитектуры в настоящее время хоста PowerShell?
  5. Есть ли щелчок динамически, во время выполнения, выберите, какой зависимый DLL загружается (если она не может, по разным причинам, быть установленным в GAC), не работая в головных болях с контекстами нагрузки с монтажом?
Это было полезно?

Решение 2

Я закончил создать модуль (спасибо, Ричард!), Но это не решило проблем, связанных с процессорной архитектурой. Чтобы решить, что я помещаю обе версии зависимой DLL в каталоге модуля, а в конструкторе каждого командлета я помещаю код инициализации (который выполняется только один раз) для загрузки соответствующей версии зависимой DLL.

Спасибо, все, для указателей.

Другие советы

Марк, у нас есть эта проблема с расширениями сообщества PowerShell с 32-битными и 64-разрядными версиями 7zip.dll. Вы можете довольно легко работать вокруг этого, пропитывая на LoadLibrary в начале вашего запуска Snapin (или прежде чем вам нужно позвонить на родной DLL). Затем вы можете проверить, если вы 32-битный или 64-битный процесс (INTPTR.Size), а затем загружаете вручную правильную DLL, используя LoadLibrary Pinvoke. После этого DLLLIMPORT («Yournative.dll») заметит, что DLL уже загружен и использует эту DLL.

Взгляните на эти два файла исходного кода PSCX:http://pscx.CodePlex.com/sourcecontrol/changeset/view/74794sprojectname=pscx#1358100. http://pscx.codeplex.com/sourcecontrol/changeset/view/74794sprojectname=pscx#1358102.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top