2015-11-30 8 views
1

фона:Регистрация и вызвать .exe в GAC

Я работаю над проектом, где у меня есть DLL в 32-битную (позволяет называть его MyDLL.dll). Я должен был заставить MyDll.dll работать как для 32-разрядных, так и для 64-битных приложений, но поскольку MyDll.dll вызывает другую 32-разрядную dll, я создал 32-разрядный .exe для работы в качестве прокси (назовем его MyExe.exe). Теперь я могу скомпилировать MyDll.dll как AnyCPU, и он начнет и отправит вызовы MyExe.exe, который скомпилирован как 32-разрядный. Это работает, когда я кладу MyDll.dll и MyExe.exe в папку Bin моего проекта. (Более подробное описание истории можно найти в this question)

Моя проблема:

32-разрядные DLL, что я начал с был зарегистрирован в GAC (GAC_32). Мне удалось зарегистрировать MyDll.dll, скомпилированный как AnyCPU в GAC (GAC_MSIL), и я вижу, что он используется правильно. Однако, когда я зарегистрировал 32-разрядный MyExe.exe в GAC (GAC_32), он не используется.

Я новичок в GAC и у меня есть два вопроса:

  1. Могу ли я убедиться, что MyDll.dll начинает MyExe.exe, когда оба они находятся в GAC? Я начинаю MyExe.exe как это:

    System.Diagnostics.Process.Start("MyExe.exe"); 
    
  2. Это хорошая практика, или было бы лучше просто пропустить GAC?

ответ

3
Process.Start("MyExe.exe"); 

Это запрашивает у операционной системы, чтобы найти и запустить файл MyExe.exe. Это будет never посмотрите в GAC для этого файла, он не знает, что это место для поиска исполняемых файлов. И не может ли это выполнить эту работу, она не знает beans о конкретной версии, которую вы хотите.

GAC - это подробная информация о реализации управляемого кода, только CLR знает об этом. Курица-яйцо, CLR не начинается до после EXE начинает работать.

Какова основная причина, почему нет смысла вкладывать EXE в GAC. Они принадлежат к C: \ Program Files.