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 ...

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.


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


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ó.


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>

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>

1

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


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>

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ó.


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.


0

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


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.


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
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.