2009-05-01 3 views
2

У меня есть dll. Эта DLL загружается на сервер. Я хочу, чтобы каждый раз, когда приложение начинает получать «последнюю» DLL с сервера, поэтому я использовал следующий код в своем app.config. Почему он не работает?Удаленная кодовая база

здесь файл app.config:

<configuration> 
<runtime> 
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 
     <dependentAssembly> 
      <assemblyIdentity name="ReflectionTest" 
      publicKeyToken="f94c9b9f0707ee96" 
       culture="neutral" /> 
      <codeBase version="1.0.0.0"     
       href="http://127.0.0.1/ReflectionTest.dll"/> 
     </dependentAssembly> 
    </assemblyBinding> 
</runtime> 
</configuration> 

ответ

1

Во-первых, вы можете быть на неправильном пути. Даже если вы не изменили версию, ваше приложение может закончиться использованием более старой копии сборки.

Принимая действительный URI в вашем элементе <codebase>, когда ваше приложение запускается в первый раз, среда выполнения не найдет сборку до тех пор, пока она не проверит вашу кодовую базу. Затем он загрузит сборку в GAC. Когда ваше приложение снова запустится, среда выполнения найдет эту сборку в GAC, поэтому ей не нужно будет ее проверять.

Вместо использования <codebase>, рассмотрите возможность использования Reflection. В частности, вы можете использовать Assembly.LoadFrom(assemblyUri) в своем приложении, получая URI из настройки приложения. Оттуда вы создадите объекты с использованием Reflection API, в частности, используя Activator.CreateInstance<T>().

Что касается получения этой сборки с вашего сервера, убедитесь, что ваша DLL находится в правильном месте и что ваш веб-сервер работает и правильно настроен.

0

Ваш .dll на самом деле доступны в этом месте? Вы обслуживаете его через какое-то веб-приложение?

Если вы введете этот URL-адрес в веб-браузер, разрешите ли вы загрузить или открыть этот файл?

+0

Да, он доступен. Является сервером Apache, я размещаю там свои сайты – Timotei

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