VSTS 2010 SGEN: erreur: impossible de charger le fichier ou l'assembly (exception de HRESULT: 0x80131515)

106

Je rencontre un problème étrange avec VS2010. Nous utilisons TFS pour créer nos DLL d'API et nous les référenions dans nos projets en utilisant un lecteur réseau mappé qui était entièrement fiable. Nous travaillons comme ça depuis au moins deux ans et tout a parfaitement fonctionné.

Aujourd'hui, j'ai converti une webapp en vs2010 et quand je la compile dans Release, ça me donne:

SGEN: erreur: impossible de charger le fichier ou l'assembly 'file: /// L: \ Api \ Release API_20100521.1 \ Release \ CS.API.Exceptions.dll' ou l'une de ses dépendances. L'opération n'est pas prise en charge. (Exception de HRESULT: 0x80131515)

La chose étrange est que cela fonctionne quand il est sous le profil de débogage ...

J'ai essayé d'ajouter le

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

dans app.config et toujours pas de chance (voir http://social.msdn.microsoft.com/Forums/en/msbuild/thread/d12f6301-85bf-4b9e-8e34-a06398a60df0 et http://msdn.microsoft.com/ fr-fr / library / dd409252 (VS.100) .aspx )

Je suis à peu près sûr que ce problème provient de Visual Studio ou de msbuild, car notre code ne fonctionnera pas à partir d'un partage réseau lors de la production, car toutes les dll référencées sont copiées dans le dossier bin.

Si quelqu'un a une solution (ou juste une idée de chemin de recherche), faites-le moi savoir!

Edit: Il s'avère qu'il fonctionnait en mode Débogage car la génération d'assemblys de sérialisation était désactivée. Comme le titre l'indique, c'est vraiment un problème SGEN puisque c'est cet utilitaire qui dit que le chemin n'est pas fiable ...

Développeur IT
la source

Réponses:

213

J'ai pu corriger cette erreur en trouvant la DLL d'assemblage dans l'Explorateur Windows, en cliquant avec le bouton droit de la souris, en choisissant Propriétés, puis en appuyant sur le bouton «débloquer». La DLL a un flux qui la marque comme fichier externe - et en cliquant sur Débloquer, vous supprimez cette désignation.

Slaggg
la source
travaillé ... seul développeur à avoir ce problème .. directement de TFS ... bizarre
spaghetticowboy
La raison pour laquelle il a été verrouillé est que mon code source reposait sur un partage. Déplacement du code sur le disque local - tout s'est bien passé. (Autorisations .NET4 SGEN sur les problèmes de partage).
jeudi
31
Dieu te bénisse. Sérieusement.
FAtBalloon
Veuillez noter que la plupart des entreprises n'autorisent pas l'accès des administrateurs locaux ou désactivent expressément l'accès au bouton «Débloquer» pour les utilisateurs réguliers, y compris les développeurs.
kevinarpe
2
J'ai eu ce problème avec les DLL copiées à partir d'un fichier zip.
79IT
59

Je viens d'avoir le même problème / similaire sur un serveur de build TFS où une build référençait des DLL à partir d'un partage réseau.

Le problème est que le modèle de politique de sécurité CLR v4 a changé depuis les versions précédentes et ne sont pas des assemblys sandbox comme avant.

Pour résoudre votre problème, recherchez simplement l'emplacement de sgen.exe et créez un sgen.exe.config dans le même dossier avec le contenu suivant:

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

sgen.exe est généralement à

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

Vous pouvez lire certains des changements concernant les stratégies CAS dans .NET 4.0 dans cet article de blog: Lien

Martin Hyldahl
la source
1
ouais je suis tombé sur cette solution mais c'était inutile pour moi, je n'ai rien changé ... nous avons résolu les assemblys de sérialisation désactivés
Developer IT
7
Pour d'autres informations, SGEN est généralement à "C: \ Program Files \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools"
Steve Cooper
Développeur informatique: Dans mon cas, je ne pouvais pas désactiver la génération d'assemblys de sérialisation car j'en avais besoin. Mais le retournement de cause des assemblys de sérialisation peut également être une solution.
Martin Hyldahl
1
Notez que s'il s'agit d'une machine 64 bits, vous devez créer sous ... \ Bin \ NETFX 4.0 Tools \ x64 \
Vivek Ayer
1
Pour VS2015, localisez-le sur: C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools
Farshid
23

Eu le même problème et le changement de configuration n'a pas fonctionné. Ce n'est que lorsque j'ai désactivé Générer l'assemblage de sérialisation dans les propriétés du projet que cela a fonctionné.

Rob
la source
A travaillé pour moi aussi. C'est également la bonne réponse pour l'OP en fonction de son commentaire édité dans la question.
akousmata
A travaillé pour moi. Tks.
Vinicius Gonçalves
1
Propriétés du projet -> Construire -> Générer l'assemblage de sérialisation était Auto, après l'avoir désactivé, la compilation a commencé à fonctionner comme un charme. +1 et merci.
Honza P.
Cela a fonctionné dans mon cas aussi. Quoi qu'il en soit, je me demande ce que signifie exactement le désactiver, car par défaut, il est activé pour la configuration Release: je voudrais être sûr qu'il n'a aucun effet secondaire sur l'application lorsque je le publie sur l'environnement de production.
Asimov
Un seul projet avait ce problème - l'a fait passer de Auto à Off - ce projet faisait référence à un SOAP WS.
Subha
3

J'ai eu exactement le même problème et je l'ai résolu en ajoutant le sgen.exe.config sous C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools

avec cette configuration simple comme d'autres l'ont dit

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

Pour ceux d'entre vous exécutant une version 64 bits du service de construction TFS, j'ai dû créer le fichier de configuration dans le chemin suivant:

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

Et le contenu du fichier:

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

J'ai eu le même problème, j'ai chargé l'assemblage dans le GAC et j'ai travaillé

Gabouy
la source
le fait est que nous ne voulons pas de ceux-ci dans le GAC. nous avons résolu les assemblys de sérialisation désactivés
Developer IT
1

L'ajout de l'extrait ci-dessous au fichier app.config a fonctionné dans mon cas. J'exécute Windows XP, avec le Service Pack 1 VS2010.

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>
vénétie
la source
0

Tout comme un FYI si vous exécutez Windows 7, le fichier sgen.exe peut être trouvé à l'adresse:

C: \ Program Files (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Outils

J'ai dû créer un sgen.exe.config et le placer là, puis ce problème a disparu.

ewahner
la source
0

Ni le unblockni le configtravaillé pour moi. Ce qui a fait le truc pour moi était cette astucecaspol . L'Iran

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

Et j'étais prêt à partir, même pas un redémarrage de VisualStudio requis.

Yahoo sérieux
la source
0

J'ai eu un problème similaire et j'en ai finalement surmonté en supprimant le fichier licenses.licx dans le dossier Propriétés de la solution.

Clemchen
la source
0

Juste au cas où comme moi, Débloquer n'était pas une solution, car Débloquer n'apparaît pas sur les propriétés de mon fichier dll. J'ai continué à chercher et j'ai fini par fermer mon fichier de solution et rouvrir à l'aide du C: copie locale au lieu du chemin UNC réseau vers le fichier sln du projet. A pu publier après avoir emprunté cette voie.

Taersious
la source
0

Dans mon cas, un tas de dll ont été bloqués.

Pour débloquer tous les fichiers du dossier, j'ai utilisé Power Shell avec la commande suivante

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