COM бок о бок сборки с использованием DLL из другого каталога?
Я уверен, что ответ - нет, но на всякий случай:
Можно ли для автономного exe-файла с соответствующим манифестом SxS ссылаться на COM DLL, используя относительный путь, или загружать их из каталога, который не является текущим?
Мы работаем в среде grid, которая развертывает различные пакеты (например, zip-файлы), используя общую папку в качестве корневого каталога. Несколько приложений хотели бы ссылаться на общий COM Api (с манифестами DLL) из общего расположения. Однако, поскольку сетка окружена изолированной средой, мы не можем установить ее в каталог Windows SxS, и мы также не можем сделать это вне полосы (то есть не развернуто сеткой).
Есть ли у меня какая-либо надежда сказать, что загрузить COM.DLL из ..\SomeCommonDir\COM.dll или C: \ Program Files \ SomeCommonDir \ COM.DLL?
Все отлично работает как частная сборка.
1 ответ
Это должно быть возможно с использованием контекстов активации. (Я предполагаю, что вы в порядке с манифестом и т. Д., Так как кажется, что вы можете заставить его работать нормально "стандартным" способом...)
Здесь есть "хардкорный" способ делать вещи, или вы можете использовать Microsoft.Windows.ActCtx
объект. Они оба позволяют вам вручную / программно установить местоположение манифеста клиента для контекста активации; манифест клиента должен находиться в той же папке, что и манифест сборки и сборка.
Этот ТАК вопрос может быть полезен для вас. А вот фрагмент одного из способов сделать это...
// Create an activation context
Type actCtxType = System.Type.GetTypeFromProgID("Microsoft.Windows.ActCtx");
dynamic actCtx = System.Activator.CreateInstance(actCtxType);
actCtx.Manifest = @"Path\To\COMClient.manifest";
// Create the object you want, using the activation context
dynamic obj = actCtx.CreateObject("COMTestService.COMTestObject");
// Now use it!
var question = obj.GetQuestionFromAnswer(42);