2009-05-01 7 views
2

나는 dll을 가지고있다. 그 dll은 서버에 업로드됩니다. 응용 프로그램이 서버에서 "최신"dll을 가져 오기 시작할 때마다이를 원하므로 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

먼저 잘못된 트랙에있을 수 있습니다. 버전을 변경하지 않았더라도 응용 프로그램은 이전 어셈블리 사본을 사용하여 종료 될 수 있습니다.

<codebase> 요소에 유효한 URI가 있다고 가정하면 응용 프로그램이 처음 실행될 때 런타임에서 코드베이스를 탐색 할 때까지 런타임에서 어셈블리를 찾지 않습니다. 그런 다음 어셈블리를 GAC로 다운로드합니다. 응용 프로그램이 다시 실행되면 런타임에서 해당 어셈블리를 GAC에서 찾을 수 있으므로 검사 할 필요가 없습니다.

<codebase> 대신에 Reflection을 사용하는 것이 좋습니다. 특히 애플리케이션에서 Assembly.LoadFrom(assemblyUri)을 사용하여 애플리케이션 설정에서 URI를 가져올 수 있습니다. 거기에서 Reflection API를 사용하여 객체를 생성합니다 (특히 Activator.CreateInstance<T>() 사용).

서버에서 해당 어셈블리를 가져 오는 것과 관련하여 DLL이 올바른 위치에 있고 웹 서버가 실행 중이고 올바르게 구성되어 있는지 확인하십시오.

0

이 .DLL 그 위치에 실제로 볼 수 있습니다 : 여기

은 app.config 파일입니까? 웹 응용 프로그램을 통해이를 제공하고 있습니까?

해당 URL을 웹 브라우저에 입력하면 해당 파일을 다운로드하거나 열 수 있습니까?

+0

예, 가능합니다. 아파치 서버, 나는 거기에 내 웹 사이트 호스팅 – Timotei