Службы компонентов COM + C # Что-то не совсем верно? - PullRequest
1 голос
/ 18 октября 2011

Я пишу C # COM + для другого COM + DLL.У него очень простой интерфейс, и я успешно протестировал его.

Я использую «службы компонентов» частично из-за старой системы и частично из-за того, что она выглядит правильно.

У меня проблемаэто когда я регистрирую устаревшую dll, путь к dll в свойствах - это ACTUAL dll, также она просто работает.

Когда я регистрирую, мое падение на пути к dll - это mscoree.dll, а не моя dll,и, кажется, ударил и пропустил, должен ли я добавить свою DLL в GAC?Я пробовал код для автоматического добавления его в кэш, но он не работает?

Кроме того, так как я использую вызов WCF с моим вызовом COM +, я сталкиваюсь с проблемой относительно того, где находится dll конфигурациив настоящее время он ищет настройки в C: \ Windows \ system32 \ dllhost.exe.config

Что бы я хотел, чтобы он смотрел вдоль фактической библиотеки DLL?Я что-то упустил?

1 Ответ

3 голосов
/ 18 октября 2011

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

Где mscoree ищет вашу сборку для загрузки, зависит от того, как вы ее зарегистрировали. Он следует нормальным правилам проверки пути загрузчика .NET Fusion, что означает, что он обычно будет искать в GAC, если вы не указали кодовую базу во время регистрации (например, используя аргумент командной строки regasm /codebase).

Параметры конфигурации для управляемого кода ограничены AppDomain, и по умолчанию имя файла конфигурации для AppDomain получается путем добавления суффикса .config к пути исполняемого файла процесса, в котором размещен AppDomain. Ваш компонент размещен в COM +, поэтому будет выполняться в процессе, который является экземпляром DllHost.exe. Таким образом, по умолчанию файл конфигурации для домена приложения вашего компонента будет DllHost.exe.config. Однако, если вы укажете корневой каталог приложения для приложения COM +, это изменит местоположение, в котором AppDomain ищет свою конфигурацию, на [COM+ Application Root Directory]\[COM+ Application Name].config.

...