Pergunta

Meu executável .NET abc.exe faz referência a vários assemblies.Um deles é chamado xyz.core.exe.Tenho problemas para fazê-lo funcionar quando ele está sendo iniciado a partir de um local de rede especificado por meio de um nome de compartilhamento com um caminho como \\localhost\xyz\abc.exe.Isso funciona bem se eu montar uma letra de unidade de rede chamada Z: sobre \\localhost\xyz e se eu lançar Z:\abc.exe.

O .NET parece ficar confuso ao tentar carregar o xyz.core.exe montagem do compartilhamento.Isso lança um System.IO.FileNotFoundException exceção com as seguintes informações de log de fusão:

Assembly manager loaded from:  C:\Windows\Microsoft.NET\Framework\v2.0.50727\mscorwks.dll
Running under executable  \\localhost\xyz\abc.exe
--- A detailed error log follows. 

=== Pre-bind state information ===
LOG: User = Workstation\arnaud
LOG: DisplayName = xyz.core, Version=2.5.2.1001, Culture=neutral, PublicKeyToken=...
(Fully-specified)
LOG: Appbase = file://localhost/xyz/
LOG: Initial PrivatePath = NULL
Calling assembly : abc, Version=1.0.0.0, Culture=neutral, PublicKeyToken=...
===
LOG: This bind starts in default load context.
LOG: No application configuration file found.
LOG: Using machine configuration file from     C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config.
LOG: Post-policy reference: xyz.core, Version=2.5.2.1001, Culture=neutral, PublicKeyToken=...
LOG: Attempting download of new URL file://localhost/xyz/xyz.core.DLL.
LOG: Attempting download of new URL file://localhost/xyz/xyz.core/xyz.core.DLL.
LOG: Attempting download of new URL file://localhost/xyz/xyz.core.EXE.
LOG: Attempting download of new URL file://localhost/xyz/xyz.core/xyz.core.EXE.

Olhando isso por outro ângulo com o Process Monitor, vejo algumas tentativas de acesso em minha unidade local com os seguintes caminhos:

C:\xyz\xyz.core.dll
C:\xyz\xyz.core\xyz.core.dll
C:\xyz\xyz.core.exe
C:\xyz\xyz.core\xyz.core.exe

como se o carregador entendesse mal a intenção de carregar de um compartilhamento de rede e descartasse o \\localhost usar C: em vez de.O problema parece não estar relacionado às configurações de segurança (nunca mexi com CASPOL na minha máquina) e estou usando o .NET 3.5 SP1 que permite que executáveis ​​sejam iniciados a partir de um compartilhamento.

E o fato de iniciar o programa por meio da letra de unidade de rede mapeada equivalente deve confirmar que isso não é um problema de segurança.

O problema também não está relacionado ao fato de a referência ser a um assembly EXE, pois produz o mesmo tipo de erros de carregamento com referências a assemblies DLL simples.

Alguma idéia do que poderia ser a causa desse problema de carregamento?Alguém mais se deparou com tal situação?

Foi útil?

Solução

Não consigo explicar o "C:\xyz\xyz.core.dll" (exceto por curiosidade), mas o resto é exatamente o que eu esperaria.

Tudo isso parece ligado à segurança de acesso ao código.Até recentemente, você precisaria usar "caspol" para configurar o CAS e permitir executar o exe de qualquer tipo de compartilhamento de rede.Isso foi alterado (.NET 3.5 ou .NET 3.5 SP1) de modo que mapeado ações ("f:" etc) fazer obter permissão de execução, mas os compartilhamentos UNC não.

Você pode use "caspol" para conceder acesso ao UNC (assim), mas IMO é uma opção muito melhor mudar para a implantação do ClickOnce.Isso pode ainda ser por meio de um compartilhamento de rede, mas inclui informações adicionais de publicação que permitem que o tempo de execução o monte.EU acreditar ele também pode ser usado para implantar de forma que funcione offline (quando a rede não está disponível), mas atualize automaticamente a partir do compartilhamento quando possível. Eu sei que isso funciona para implantação http - eu acreditar funciona para rede).O IDE apresenta isso sob o pretexto de "publicar" e leva cerca de 5 cliques para concluir.

Outras dicas

Estou confuso - se você usar localhost, ele deverá ir para o disco rígido local.

Você está tentando remapear o host local para apontar para outro lugar?Se for esse o caso, pode ser isso que causa problemas - tente usar um nome diferente

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top