Pergunta
Eu tenho um dll. Essa dll é carregado em um servidor. Eu quero que cada vez que o aplicativo é iniciado para obter o "mais recente" dll a partir do servidor, então eu usei o seguinte código no meu app. Por que ele não está funcionando?
aqui é o arquivo 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>
Solução
Em primeiro lugar, você pode estar no caminho errado. Mesmo se você não mudar a versão, o aplicativo pode acabar usando uma cópia mais antiga do conjunto.
Assumindo um URI válido em seu elemento <codebase>
, quando seu aplicativo é executado pela primeira vez, o tempo de execução não vai encontrar o conjunto em até que investiga sua base de código. Em seguida, ele irá baixar o assembly no GAC. Quando seu aplicativo é executado novamente, o tempo de execução vai achar que assembly no GAC, por isso não terá de tentar encontrá-la.
Em vez de usar <codebase>
, considere o uso de reflexão. Especificamente, você pode querer usar Assembly.LoadFrom(assemblyUri)
em sua aplicação, ficando a URI de uma configuração de aplicativo. De lá, você criar objetos usando a API Reflection, particularmente usando Activator.CreateInstance<T>()
.
Como para obter que a montagem do seu servidor está em causa, certifique-se de que sua DLL está no local certo e que seu servidor web está em execução e configurado corretamente.
Outras dicas
é seu .dll realmente disponível naquele local? Você está servindo-lo através de algum aplicativo web?
Se você digitar a URL em um navegador web, isso permitirá que você baixar ou abrir esse arquivo?