AppDomain ExecuteAssembly Не удалось загрузить файл или сборку - PullRequest
1 голос
/ 06 января 2012

У меня есть приложение (app1), которое загружает другое приложение (app2), например:

this._appDomain.ExecuteAssembly(assemblyName);

Я получаю эту ошибку при выполнении этой строки:

Не удалось загрузить файл или сборку Foo ...

Приложение 2 имеет ссылку на Foo. Если я добавлю ссылку на Foo в app1, это работает. Проблема в том, что я не хочу, чтобы app1 ссылался на Foo. Основная цель App1 - обнаружение новых версий app2 в общем сетевом ресурсе, выгрузка app2, копирование новых двоичных файлов, затем снова запуск app2 с использованием строки выше. После этого, если в app1 есть старый Foo, то app2 будет использовать его вместо Foo в своем собственном рабочем каталоге.

Как сделать так, чтобы только app2 ссылался на Foo, но app1 все равно будет загружать app2 без этой ошибки?

Примечание. Я использую теневое копирование, и оно работает, когда в app1 есть ссылка на Foo.

appDomainSetup.ShadowCopyFiles   = "true";

Ответы [ 2 ]

2 голосов
/ 06 января 2012

См. Этот вопрос SO: Как добавить папку в путь поиска сборки во время выполнения в .NET?

или вы можете добавить тег <codebase> в свою конфигурацию, указав, кудапоиск сборок и добавление ссылки на зависимости app2.

<configuration>
   <runtime>
      <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
         <dependentAssembly>
            <assemblyIdentity name="MyAssembly2"  culture="neutral" publicKeyToken="307041694a995978"/>
            <codeBase version="1.0.1524.23149" href="FILE://C:/Myassemblies/MyAssembly2.dll"/>
         </dependentAssembly>
      </assemblyBinding>
   </runtime>
</configuration>
1 голос
/ 06 января 2012

См. AppDomainSetup.ApplicationBase .Вы можете указать базовый каталог приложения для вашего домена приложения через это свойство.ApplicationBase - это, по сути, отправная точка для проверки сборки.Кроме того, вы можете указать дополнительные пути к частным лоткам, используя AppDomainSetup.PrivateBinPath .Это позволяет зондированию искать дополнительные каталоги.На страницах MSDN есть примеры кода.

...