Это мой текущий сценарий развертывания:
- Клиентское приложение развернуто в папке A
- DLL-библиотека COM, DLL-оболочка C++/CLI и сборка .NET развернуты в папке B.
- DLL/сборки вместе образуют SDK, клиентское приложение является сторонним потребителем.
Вот как это должно работать:
- Клиентское приложение запускается и создает COM-объект
- Клиентское приложение вызывает функцию в COM-объекте
- COM-объект перенаправляет вызов в DLL-оболочку C++/CLI
- Функция-оболочка C++/CLI перенаправляет вызов в сборку .NET
Проблема: оболочка C++/CLI не может найти сборку .NET, и приложение аварийно завершает работу.
Решения, о которых я могу думать до сих пор:
- Дайте сборке .NET строгое имя и разверните ее в GAC, а не в папке B.
- Дайте клиентскому приложению файл .config и скажите ему искать сборки в папке B.
- Добавьте в оболочку C++/CLI какую-то пользовательскую «подпрограмму разрешения», которая динамически загружает сборку .NET (что-то вроде этот ответ SO а>)
По разным причинам ни одно из этих решений не кажется особенно привлекательным. Знаете ли вы какой-либо другой механизм, как можно решить эту проблему? Идеальным решением было бы использование какой-либо конфигурации на стороне SDK, но, насколько я знаю, невозможно предоставить сборкам файл .config, или нет?
Поскольку я не особенно разбираюсь в .NET, я также был бы признателен за комментарии к решению «рутины распознавателя». Это то, что люди обычно делают, или это что-то экзотическое, чего следует избегать по какой-то причине?
FileNotFoundException
. Это происходит потому, что .NET ищет сборки только в папке A (где находится файл .exe приложения) и в GAC. - person herzbube   schedule 28.05.2013