12

再ターゲット可能なアセンブリ参照が .NET Compact Framework に導入され、ポータブル クラス ライブラリをサポートするために使用されるようになりました。

基本的に、コンパイラは次の MSIL を出力します。

.assembly extern retargetable mscorlib
{
    .publickeytoken = (7C EC 85 D7 BE A7 79 8E )                         
    .ver 2:0:5:0
}

C# コンパイラは、再ターゲット可能な参照を発行する必要があることをどのように理解するのでしょうか? また、移植可能なクラス ライブラリの外部であっても、C# コンパイラにそのような参照を発行させるにはどうすればよいでしょうか?

4

3 に答える 3

3

アセンブリ自体の場合、これはアセンブリフラグ、つまり[アセンブリ:AssemblyFlags(AssemblyNameFlags.Retargetable)]です。

このフラグは、プラットフォームアセンブリ以外では意味がないことに注意してください。カスタムアセンブリは、再ターゲットできません。

参照用に、参照されているアセンブリから名前の一部としてコピーされます。

于 2012-07-11T04:17:44.450 に答える
2

これが役立つかどうかはわかりませんが、次のファイルが自動生成され、ビルドに含まれています。

using System;
using System.Reflection;
[assembly: global::System.Runtime.Versioning.TargetFrameworkAttribute(
   ".NETPortable,Version=v4.0,Profile=Profile4", 
   FrameworkDisplayName = ".NET Portable Subset")]

これは、何らかの魔法を行うようにコンパイラーに示唆する可能性があります。

編集:

上記により、ライブラリは移植可能になると思います。コマンドラインから、/nostdlib+が使用され、ポータブルmscorlib.dllが参照されていることがわかります (これは、上記と同じ属性を持っていると思います)。

"...\Program Files\Reference Assemblies\Microsoft\Framework.NETPortable\v4.0\Profile\Profile4\mscorlib.dll"

于 2012-07-10T07:55:10.577 に答える
0

実験により、参照されるアセンブリが再ターゲット可能としてマークされている場合、C#コンパイラが参照コンパイラを再ターゲット可能にすることに気付きました(.assemblyMSILのセクションの修飾子)。コンパイラがアセンブリを再ターゲット可能にする方法をまだ見つけていません。

于 2012-07-10T11:00:18.070 に答える