私はAutofacプロジェクトに取り組んでおり、すべての共通ロジックをポータブルクラスライブラリに変換し、特定の機能のためにプラットフォーム固有のライブラリを追加しようとしています。
私の開発マシンはWindows8Enterprise(64ビット)であり、すべてのトリミングを備えたVS2012Ultimateがインストールされています。以前の.NETFrameworkのもの、追加のツール、または追加のPCL固有のツールはインストールされていません。これは、基本的なものだけを備えたクリーンで新しいVMです。この構成では、すべてのビルドとテストが正常に実行されます。
ポータブルクラスライブラリの1つに依存する.NET4.5(フルプロファイル)ライブラリでsecannotate.exeを実行しようとすると、 mscorlib2.0.5.0が必要であることを示すエラーが発生します。
エラーの例を次に示します。PCLはAutofac.dllです。.NET4.5フルプロファイルライブラリは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)
Autofacポータブルクラスライブラリのターゲット:
- .NET 4.0
- Silverlight 5
- .NETforWindowsストアアプリ
それらを対象とした新しい/空のPCLを作成してビルドすることで、問題を再現できます。mscorlib2.0.5.0を参照していることがわかります。
いくつかの検索により、これは古いSilverlightアセンブリバージョンへの参照であると私は信じていますが、PCLプロジェクトには特定のバージョン参照がないため、これがVS2012PCLツールによって導入されていることを想像できます。他の人は、VS2012より前にリリースされた.NETFrameworkアップデートをインストールすることで、同様の問題を修正したようです。実際には、マシンのどこにもmscorlib2.0.5.0が見つかりません。
私が作成したAutofac.dllアセンブリをdotPeekで見ると、次の参照が表示されます。
- mscorlib 2.0.5.0
- システム2.0.5.0
- System.ComponentModel.Composition 2.0.5.0
- System.Core 2.0.5.0
また、これは単なるPCLプロジェクトであり、直接何も参照していません。文字通り-.csprojファイルには単一の参照行はありません。
この二分法の問題を解決するにはどうすればよいですか?インストールする必要がある追加のものはありますか?secannotateコマンドラインに追加する必要のあるパラメーターはありますか?