VSTS 2010 SGEN: erro: não foi possível carregar o arquivo ou montagem (exceção de HRESULT: 0x80131515)

106

Estou tendo um problema estranho com o VS2010. Usamos o TFS para construir nossas dlls de API e usávamos para referenciá-las em nossos projetos, usando uma unidade de rede mapeada que fosse totalmente confiável. Trabalhamos assim há pelo menos dois anos e tudo funcionou perfeitamente.

Hoje, converti um webapp para vs2010 e quando o compilo no Release, ele me dá:

SGEN: erro: Não foi possível carregar o arquivo ou assembly 'file: /// L: \ Api \ Release API_20100521.1 \ Release \ CS.API.Exceptions.dll' ou uma de suas dependências. A operação não é compatível. (Exceção de HRESULT: 0x80131515)

O estranho é que está funcionando quando está no perfil de depuração ...

Eu tentei adicionar o

<runtime>
   <loadFromRemoteSources enabled="true" />
</runtime>

em app.config e ainda sem sorte (consulte http://social.msdn.microsoft.com/Forums/en/msbuild/thread/d12f6301-85bf-4b9e-8e34-a06398a60df0 e http://msdn.microsoft.com/ en-us / library / dd409252 (VS.100) .aspx )

Tenho certeza de que esse problema é do visual studio ou msbuild, já que nosso código não é executado em um compartilhamento de rede quando em produção porque todas as dlls referenciadas são copiadas para a pasta bin.

Se alguém tiver uma solução (ou apenas uma ideia para um caminho de busca) por favor me avise!

Edit: Acontece que estava funcionando no modo de depuração porque a geração de assemblies de serialização foi desativada. Como o título diz, é realmente um problema SGEN, pois é esse utilitário que diz que o caminho não é confiável ...

Desenvolvedor de TI
fonte

Respostas:

213

Consegui corrigir esse erro encontrando a DLL do assembly no Windows Explorer, clicando com o botão direito, escolhendo Propriedades e pressionando o botão "desbloquear". A DLL tem um fluxo que a está marcando como um arquivo externo - e clicando em desbloquear você remove essa designação.

Slaggg
fonte
funcionou ... apenas o desenvolvedor tem esse problema ... direto do TFS ... estranho
spaghetticowboy
O motivo pelo qual foi bloqueado é que meu código-fonte estava em um compartilhamento. Movido o código para o disco local - tudo correu bem. (Permissões .NET4 SGEN em questões de compartilhamentos).
thedrs
31
Deus te abençoê. Seriamente.
FAtBalloon de
Observe que a maioria das empresas não permite acesso de administrador local ou desabilita expressamente o acesso ao botão "Desbloquear" para usuários regulares, incluindo desenvolvedores.
kevinarpe
2
Eu tive esse problema com DLLs copiados de um arquivo zip.
79IT
59

Acabei de ter o mesmo problema / semelhante em um servidor de compilação TFS onde uma compilação estava fazendo referência a dll de um compartilhamento de rede.

O problema é que o modelo de política de segurança do CLR v4 mudou desde as versões anteriores e não são montagens de sandbox como antes.

Para corrigir seu problema, basta encontrar a localização de sgen.exe e criar um sgen.exe.config na mesma pasta com o seguinte conteúdo:

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>

sgen.exe geralmente está em

"C:\Program Files\Microsoft SDKs\Windows\v[current version]\bin\NETFX 4.0 Tools"

Você pode ler sobre algumas das mudanças em torno das políticas de CAS no .NET 4.0 nesta postagem do blog: Link

Martin Hyldahl
fonte
1
sim, me deparei com essa solução, mas foi inútil para mim, não mudei nada ... resolvemos como assemblies de serialização desligados
Desenvolvedor de TI
7
Para informações de outros, SGEN normalmente está em "C: \ Arquivos de programas \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools"
Steve Cooper
Desenvolvedor de TI: No meu caso, não consegui desligar a geração de assemblies de serialização porque eu precisava deles. Porém, o giro da causa dos conjuntos de serialização também pode ser uma solução.
Martin Hyldahl
1
Observe que, se for uma máquina de 64 bits, você precisa criar em ... \ Bin \ NETFX 4.0 Tools \ x64 \
Vivek Ayer
1
Para VS2015, localize-o em: C: \ Arquivos de programas (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools
Farshid
23

Tive o mesmo problema e a alteração de configuração não funcionou. Somente quando eu desativei Gerar conjunto de serialização nas propriedades do projeto, isso funcionou.

Roubar
fonte
Funcionou para mim também. Esta também é a resposta correta para o OP com base em seu comentário editado na pergunta.
akousmata
Funcionou para mim. Tks.
Vinicius Gonçalves
1
Propriedades do projeto -> Construir -> Gerar montagem de serialização era Auto, após defini-lo como Off, a compilação começou a funcionar perfeitamente. +1 e obrigado.
Honza P.
Isso funcionou no meu caso também. De qualquer forma, eu me pergunto o que exatamente significa desligá-lo, já que por padrão ele está ligado para a configuração de Release: Eu gostaria de ter certeza de que isso não terá nenhum efeito colateral no aplicativo quando publicá-lo no ambiente de produção.
Asimov
Apenas um projeto teve esse problema - mudou de Auto para Off - este projeto estava referenciando um SOAP WS.
Subha
3

Eu tive exatamente esse mesmo problema e resolvi-o adicionando o sgen.exe.config em C: \ Arquivos de programas (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools

com esta configuração simples, como outros disseram

<?xml version ="1.0"?>
<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>
Matt Watson
fonte
2

Para aqueles que estão executando uma versão de 64 bits do serviço de compilação TFS, tive que criar o arquivo de configuração no seguinte caminho:

 C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\x64

E o conteúdo do arquivo:

<?xml version ="1.0"?>
<configuration>
<runtime>
    <loadFromRemoteSources enabled="true" />
</runtime>
</configuration>
Gmasselli
fonte
1

Tive o mesmo problema, carreguei a montagem no GAC e funcionou

gabouy
fonte
o problema é que não queremos isso no GAC. resolvemos como assemblies de serialização desligados
Desenvolvedor de TI
1

Adicionar o snippet abaixo ao arquivo app.config funcionou no meu caso. Estou executando o Windows XP, com VS2010 service pack 1.

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>
venetia
fonte
0

Apenas para sua informação, se você estiver executando o Windows 7, o arquivo sgen.exe pode ser encontrado em:

C: \ Arquivos de programas (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools

Tive que criar um sgen.exe.config e colocá-lo lá e esse problema foi embora.

Ewahner
fonte
0

Nem o unblocknem o configfuncionou para mim. O que funcionou para mim foi esta dicacaspol . Eu corri

 %windir%\Microsoft.NET\Framework\v2.0.50727\CasPol.exe -m -ag 1.2 -url file://UncPathName/UncSubPath/* FullTrust

E eu estava pronto para ir, nem mesmo era necessário reiniciar o VisualStudio.

Yahoo Serious
fonte
0

Tive um problema semelhante e finalmente resolvi removendo o arquivo licens.licx da pasta Propriedades da solução.

Clemchen
fonte
0

Apenas no caso de como eu, Unblock não foi uma solução, pois Unblock não aparece nas propriedades do meu arquivo dll. Continuei procurando e acabei fechando meu arquivo de solução e abrindo novamente usando a cópia C: local em vez do caminho UNC de rede para o arquivo sln do projeto. Consegui publicar depois de seguir esse caminho.

Taersious
fonte
0

No meu caso, um monte de dlls foram bloqueados.

Para desbloquear todos os arquivos na pasta, usei o power shell com o seguinte comando

dir -Path [directory path] -Recurse | Unblock-File
Daniil Grankin
fonte