2016-01-29 3 views
0

Я написал библиотеку .NET, и эта библиотека вызывается макросом VBA в стороннем приложении. Я использовал Unmanaged Exports от Robert Giesecke, и эта часть отлично работает (вызывается код библиотеки C#, я могу отлаживать внутри, если я присоединяюсь к процессу и т. Д.).Библиотека классов, вызванная из сторонних зависимостей

Проблема возникает, когда мне нужно использовать типы, определенные в других библиотеках, например графический интерфейс WPF, который использует Prism Mvvm, потребуется сборка Microsoft.Practices.Prism.Mvvm. В этом случае .NET ищет сборку, но не может ее найти. Устранение неполадок с помощью монитора процессов, просмотра журнала слияния, я обнаружил, что поиск отсутствующей сборки довольно короткий, единственное место, где выполняется поиск сборки, - это корень приложения (например, в C: \ Program Files \ AppName \). Нет никакого смысла искать в каталоге, где находится dll, и где находятся зависимости. Я могу скопировать все зависимости в корневой каталог приложения, но это не очень хорошая ситуация (я не хочу входить в личное пространство другого приложения)

Как я могу описать платформу .NET, чтобы посмотреть на каталог, в котором DLL для отсутствующих сборок?

+1

Если вы не хотите использовать GAC, вам нужно будет использовать событие AppDomain.AssemblyResolve. Подписывать его правильно не так уж много радости. Обратите внимание, что вы, вероятно, уже нарушили свое требование «не вмешиваться в личное пространство», а не то, что многие хорошие способы разрешить нативный код найти вашу основную сборку. Это «за копейки, за фунт». –

+0

Спасибо, Ханс, ты привел меня по правильному пути Я посмотрел на это приложение. AssemblyResolve и нашел этот ответ: http://stackoverflow.com/a/1373295/1685379 Это решает мою проблему, сборка загружается , Впрыскивание в частном пространстве действительно есть, но только через макрос vba с интерфейсом к моей dll в нем, загруженный из еще одной папки (которая находится в пространстве пользователя, поэтому на самом деле она не является приватной больше) Спасибо за подсказку! – rienafairefr

ответ

0

См Как время выполнения локализует Сборки (https://msdn.microsoft.com/en-us/library/yx7xezcf%28v=vs.110%29.aspx)

AFAIK .NET будет выглядеть в GAC, корневой каталог приложения и любых частных путей зондовых (Нужно быть внутри папки Application корневой каталог). Он не работает, как неуправляемый мир, где вы можете установить переменную PATH и загрузить DLL.

Смежные вопросы