Estoy trabajando en the Autofac project tratando de convertir toda nuestra lógica común en Portable Class Libraries y agregando bibliotecas específicas de plataforma para funcionalidades específicas.¿Cómo puedo ejecutar con éxito secannotate.exe en una biblioteca que depende de una Biblioteca de clases portátil?
Mi máquina de desarrollo es Windows 8 Enterprise (64 bits) y tengo VS 2012 Ultimate instalado con todos los adornos. No tengo instaladas herramientas de .NET Framework anteriores, herramientas adicionales ni herramientas adicionales específicas de PCL. Es una máquina virtual limpia y nueva con solo material básico. Todo se desarrolla y las pruebas funcionan bien en esta configuración.
Cuando intenta ejecutar secannotate.exe en una biblioteca .NET 4.5 (el perfil completo) que depende de una de las bibliotecas de clases portátiles, consigo un error que indica que necesito mscorlib 2.0.5.0.
Aquí hay un error de ejemplo. La PCL es Autofac.dll; la biblioteca de perfil completo de .NET 4.5 es Autofac.Configuration.dll.
Error running annotator: Could not find referenced assembly 'Assembly(Name=mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)'. Ensure that the reference paths and assemblies are setup correctly.
Microsoft (R) .NET Framework Security Transparency Annotator 4.0.30319.17929
Copyright (C) Microsoft Corporation. All rights reserved.
Loaded assembly 'Autofac.Configuration' from 'C:\dev\opensource\autofac\trunk\build_output\bin\net40\Autofac.Configuration.dll'.
Resolving assembly 'Assembly(Name=mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089)'.
Loaded assembly 'mscorlib' from 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'.
Loaded referenced assembly from 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'.
Using core assembly: 'mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089' from 'C:\Windows\Microsoft.Net\assembly\GAC_64\mscorlib\v4.0_4.0.0.0__b77a5c561934e089\mscorlib.dll'.
Assembly 'Autofac.Configuration' is using transparency model 'Level 2'.
Assembly 'mscorlib' is using transparency model 'Level 2'.
Loaded assembly 'Autofac' from 'C:\dev\opensource\autofac\trunk\build_output\bin\net40\Autofac.dll'.
Resolving assembly 'Assembly(Name=mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e)'.
at Microsoft.Security.Tools.CciHostEnvironment.ResolvingAssemblyReference(IUnit referringUnit, AssemblyIdentity referencedAssembly)
at Microsoft.Security.Tools.CciHostEnvironment.LoadCoreAssembly()
at Microsoft.Security.Tools.CciHostEnvironment..ctor(ISecAnnotateHost host, String rootAssemblyPath)
at Microsoft.Security.Tools.SecAnnotate.LoadInputAssemblies()
at Microsoft.Security.Tools.SecAnnotate.AnnotateAssemblies()
at Microsoft.Security.Tools.SecAnnotate.Main(String[] args)
Los objetivos Biblioteca de clases portable autofac:
- .NET 4.0
- Silverlight 5
- .NET para Windows para almacenar aplicaciones
Puede reproducir el problema mediante la creación de una PCL nueva/vacía que apunta a esas cosas y la construye. Verás que hace referencia a mscorlib 2.0.5.0.
Algunas búsquedas me llevan a creer que esta es una referencia a la antigua versión del ensamblaje de Silverlight, pero los proyectos PCL no tienen referencias de versión específicas, así que solo puedo imaginar que las herramientas PCL de VS 2012 las están poniendo. Otras personas parecen haber solucionado problemas similares al instalar una actualización de .NET Framework que salió antes de VS 2012. No puedo encontrar mscorlib 2.0.5.0 en ninguna parte de mi máquina.
Buscando en dotPeek en la asamblea Autofac.dll he construido, lo veo hace referencia a:
- mscorlib 2.0.5.0
- Sistema 2.0.5.0
- System.ComponentModel.Composition 2.0.5.0
- System.Core 2.0.5.0
Y, de nuevo, es sólo un proyecto PCL, no se hace referencia directa anyth En g. Literalmente - hay no hay una sola línea de referencia en el archivo .csproj.
¿Cómo resuelvo este problema de secanotato? ¿Hay algo adicional que deba instalar? ¿Hay algún parámetro que debería estar agregando a la línea de comando secannotate?
por favor rápido =), no podemos entrar en funcionamiento con una PCL en el proyecto .. en el entorno productivo no hay forma de hacer referencia a los ensamblados de este marco 2.0.5.0 ... – benwasd
He actualizado la respuesta. –
esto corrige solo la verificación en la máquina de desarrollo. ¿no? en los clientes solo se instaló .NET 4.0, mi ensamblado PCL dirigido a .NET 4.0 aún no se puede cargar ... – benwasd