Je travaille sur the Autofac project en essayant de convertir toute notre logique commune en Portable Class Libraries et en ajoutant des bibliothèques spécifiques à la plate-forme pour des fonctionnalités spécifiques.Comment puis-je exécuter correctement secannotate.exe sur une bibliothèque qui dépend d'une bibliothèque de classes portable?
Ma machine de développement est Windows 8 Enterprise (64 bits) et j'ai installé VS 2012 Ultimate avec toutes les garnitures. Je n'ai pas installé de framework .NET, d'outils supplémentaires ou d'outils PCL supplémentaires. C'est une nouvelle machine virtuelle propre avec juste des trucs de base. Tout construit et les tests fonctionnent correctement dans cette configuration.
Lorsque je tente d'exécuter secannotate.exe sur une bibliothèque .NET 4.5 (profil complet) qui dépend de l'une des bibliothèques de classe portables, je reçois une erreur indiquant que je dois mscorlib 2.0.5.0.
Voici un exemple d'erreur. Le PCL est Autofac.dll; La bibliothèque de profils complète .NET 4.5 est 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)
Les objectifs de la bibliothèque de classe Portable Autofac:
- .NET 4.0
- Silverlight 5
- .NET pour les applications Windows Store
Vous pouvez reproduire le problème en créant un PCL nouveau/vide ciblant ces choses et le construisant. Vous verrez les références mscorlib 2.0.5.0. Certaines recherches me portent à croire qu'il s'agit d'une référence à l'ancienne version de l'assembly Silverlight, mais les projets PCL n'ont pas de références de versions spécifiques, je ne peux qu'imaginer que cela se passe avec les outils PCL VS 2012. D'autres personnes semblent avoir corrigé des problèmes similaires en installant une mise à jour du framework .NET qui est sortie avant VS 2012. Je ne trouve pas mscorlib 2.0.5.0 sur ma machine.
regardant dans dotPeek à l'assemblée Autofac.dll je construit, je le vois Références:
- mscorlib 2.0.5.0
- Système 2.0.5.0
- System.ComponentModel.Composition 2.0.5.0
- System.Core 2.0.5.0
Et, encore une fois, il est juste un projet PCL, pas directement référence anyth ing. Littéralement - il n'y a pas une seule ligne de référence dans le fichier .csproj.
Comment puis-je résoudre ce problème secondaire? Y a-t-il quelque chose de plus à installer? Y a-t-il un paramètre que je devrais ajouter à la ligne de commande secannotate?
s'il vous plaît rapide =), nous ne pouvons pas aller vivre avec un PCL dans le projet .. sur l'environnement productif il n'y a aucun moyen de référencer ces assemblys de framework 2.0.5.0 ... – benwasd
J'ai mis à jour la réponse. –
cela corrige uniquement la vérification sur la machine de développement. non? sur les clients étaient seulement. NET 4.0 est installé mon assembly PCL ciblé .NET 4.0 ne peut toujours pas être chargé .. – benwasd