VSTS 2010 SGEN: error: no se pudo cargar el archivo o ensamblado (Excepción de HRESULT: 0x80131515)

106

Estoy experimentando un problema extraño con VS2010. Usamos TFS para construir nuestras DLL de API y solíamos hacer referencia a ellas en nuestros proyectos usando una unidad de red mapeada que era totalmente confiable. Llevamos trabajando así al menos dos años y todo funcionó a la perfección.

Hoy, convertí una aplicación web a vs2010 y cuando la compilo en Release, me está dando:

SGEN: error: no se pudo cargar el archivo o ensamblado 'file: /// L: \ Api \ Release API_20100521.1 \ Release \ CS.API.Exceptions.dll' o una de sus dependencias. La operación no es compatible. (Excepción de HRESULT: 0x80131515)

Lo extraño es que funciona cuando está bajo el perfil de depuración ...

Intenté agregar el

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

en app.config y aún sin suerte (consulte http://social.msdn.microsoft.com/Forums/en/msbuild/thread/d12f6301-85bf-4b9e-8e34-a06398a60df0 y http://msdn.microsoft.com/ en-us / library / dd409252 (VS.100) .aspx )

Estoy bastante seguro de que este problema es de Visual Studio o msbuild, ya que nuestro código no se ejecutará desde un recurso compartido de red cuando esté en producción porque todas las DLL a las que se hace referencia se copian en la carpeta bin.

Si alguien tiene una solución (o simplemente una idea para una ruta de búsqueda), ¡hágamelo saber!

Editar: resulta que estaba funcionando en modo de depuración porque la generación de ensamblajes de serialización estaba desactivada. Como dice el título, es realmente un problema de SGEN ya que es esta utilidad la que dice que la ruta no es de confianza ...

Desarrollador de TI
fuente

Respuestas:

213

Pude corregir este error encontrando la DLL de ensamblaje en el Explorador de Windows, haciendo clic con el botón derecho, seleccionando Propiedades y luego presionando el botón "desbloquear". La DLL tiene una secuencia que la marca como un archivo externo y, al hacer clic en desbloquear, elimina esa designación.

Escoria
fuente
funcionó ... el único desarrollador que tiene este problema ... directamente desde TFS ... raro
spaghetticowboy
La razón por la que estaba bloqueado es que mi código fuente se encontraba en un recurso compartido. Moví el código al disco local, todo salió bien. (Permisos de .NET4 SGEN sobre problemas de recursos compartidos).
jueves
31
Dios te bendiga. Seriamente.
FAtBalloon
Tenga en cuenta que la mayoría de las empresas no permiten el acceso de administrador local o deshabilitan expresamente el acceso al botón "Desbloquear" para los usuarios habituales, incluidos los desarrolladores.
kevinarpe
2
Tuve este problema con los archivos DLL copiados de un archivo zip.
79IT
59

Acabo de tener el mismo problema / similar en un servidor de compilación TFS donde una compilación hacía referencia a dll desde un recurso compartido de red.

El problema es que el modelo de política de seguridad de CLR v4 ha cambiado desde versiones anteriores y no son ensamblados de espacio aislado como antes.

Para solucionar su problema, simplemente busque la ubicación de sgen.exe y cree un sgen.exe.config en la misma carpeta con el siguiente contenido:

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

sgen.exe suele estar en

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

Puede leer sobre algunos de los cambios relacionados con las políticas de CAS en .NET 4.0 en esta publicación de blog: Enlace

Martin Hyldahl
fuente
1
sí, me encontré con esta solución pero fue inútil para mí, no cambié nada ... lo resolvimos cuando los ensambles de serialización se desactivaron
Desarrollador de TI
7
Para obtener información de otros, SGEN generalmente está en "C: \ Archivos de programa \ Microsoft SDKs \ Windows \ v7.0A \ bin \ NETFX 4.0 Tools"
Steve Cooper
Desarrollador de TI: En mi caso, no pude desactivar la generación de ensamblajes de serialización porque los necesitaba. Sin embargo, el giro de los ensamblajes de serialización también puede ser una solución.
Martin Hyldahl
1
Tenga en cuenta que si se trata de una máquina de 64 bits, debe crearla en ... \ Bin \ NETFX 4.0 Tools \ x64 \
Vivek Ayer
1
Para VS2015, ubíquelo en: C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v10.0A \ bin \ NETFX 4.6 Tools
Farshid
23

Tuve el mismo problema y el cambio de configuración no funcionó. Solo cuando configuré Generar ensamblaje de serialización en apagado en las propiedades del proyecto, funcionó.

Robar
fuente
Me funcionó a mi también. Esta es la respuesta correcta para el OP también según su comentario editado en la pregunta.
Akousmata
Trabajó para mi. Tks.
Vinicius Gonçalves
1
Propiedades del proyecto -> Construir -> Generar ensamblaje de serialización fue Automático, después de desactivarlo, la compilación comenzó a funcionar como un encanto. +1 y gracias.
Honza P.
Eso funcionó en mi caso también. De todos modos, me pregunto qué significa exactamente apagarlo, ya que de forma predeterminada está activado para la configuración de lanzamiento: me gustaría estar seguro de que no tiene ningún efecto secundario en la aplicación cuando lo publico en el entorno de producción.
Asimov
Solo un proyecto tenía este problema, lo cambió de Automático a Desactivado, este proyecto hacía referencia a un SOAP WS.
Subha
3

Tuve exactamente el mismo problema y lo solucioné agregando sgen.exe.config en C: \ Archivos de programa (x86) \ Microsoft SDKs \ Windows \ v7.0A \ Bin \ NETFX 4.0 Tools

con esta configuración simple como han dicho otros

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

Para aquellos de ustedes que ejecutan una versión de 64 bits del servicio de compilación TFS, tuve que crear el archivo de configuración en la siguiente ruta:

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

Y el contenido del archivo:

<?xml version ="1.0"?>
<configuration>
<runtime>
    <loadFromRemoteSources enabled="true" />
</runtime>
</configuration>
gmasselli
fuente
1

Tuve el mismo problema, cargué el ensamblaje en el GAC y trabajé

gabouy
fuente
lo que pasa es que no queremos a los del GAC. Resolvimos como ensamblajes de serialización desactivados
Developer IT
1

Agregar el fragmento a continuación al archivo app.config funcionó en mi caso. Estoy ejecutando Windows XP, con el Service Pack 1 de VS2010.

<configuration>
  <runtime>
    <loadFromRemoteSources enabled="true" />
  </runtime>
</configuration>
Venecia
fuente
0

Solo como un FYI si está ejecutando Windows 7, el archivo sgen.exe se puede encontrar en:

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

Tuve que crear un sgen.exe.config y colocarlo allí y luego este problema desapareció.

ewahner
fuente
0

Ni el unblockni el configfuncionaron para mí. Lo que me hizo el truco fue este consejocaspol . Yo corrí

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

Y estaba listo para comenzar, ni siquiera era necesario reiniciar VisualStudio.

Yahoo serio
fuente
0

Tuve un problema similar y finalmente lo superé eliminando el archivo license.licx en la carpeta Propiedades de la solución.

Clemchen
fuente
0

Por si acaso, como yo, Desbloquear no fue una solución, ya que Desbloquear no aparece en las propiedades de mi archivo dll. Seguí buscando y terminé cerrando mi archivo de solución y volviendo a abrir usando la C: copia local en lugar de la ruta UNC de red al archivo SLN del proyecto. Pude publicar después de seguir esta ruta.

Taersious
fuente
0

En mi caso, se bloquearon muchos archivos DLL.

Para desbloquear todos los archivos en la carpeta, usé Power Shell con el siguiente comando

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