より多くのクラスとメンバーを PCL で共有できるように、プロファイルを追加または変更する必要があります (それらの多くは、Thread.Sleep などのフレームワークに組み込まれています)。これを行う最善の方法は何ですか?それを支援するツールはありますか?
PS: NO または STOP と言ってくれる回答者を求めているわけではありません。異なる環境で共有できるコンパイル ワンス DLL が必要です。プラットフォームごとのバイナリ、再コンパイル、ifdef はありません。
以下は私がこれまでに得たものです:
要件:
- 対象環境: Silverlight 5 および .NET Framework 4.5。
- PCL の目的: RIA クライアントと ASP.NET サーバーによる共有インフラストラクチャ (WCF なし)
- デフォルトのプロファイルに欠けているもの: XPath、Thread メソッド、DynamicMethod/ILGenerator
PCL プロファイル: Reference Assemblies\Microsoft\Framework.NETPortableの下:
- すべてのアセンブリは、「再ターゲット可能」属性が設定されたスタブです。
- すべてのアセンブリのフラグ = 0x171: 0x001 は署名済み、0x100 は再ターゲット可能、0x070 は AssemblyNameFlags で未定義 (効果がないように見える)
- アセンブリ間のすべての参照には、「Retargetable」属性もあります。
- Silverlight をサポートするすべてのアセンブリのバージョンは 2.0.5.0 です。
- ビルドされた PCL バイナリには、参照されたアセンブリごとに 2 つの参照が含まれています (例: mscorlib 2.0.5.0 リターゲット可能 + mscorlib 4.0)。
カスタマイズの試み #1
- プロファイル: Silverlight 5 + .NET Framework 4.5 (プロファイル 24)
- SL5 mscorlib.dll をプロファイル 24 にコピーします。
- SL5 mscorlib.dll を再ターゲット可能としてマーク (遅延署名への変更)
- ReSharper: すべての拡張メソッドの解決に失敗しました。ジェネリック型/値の一致でエラーが発生しました
- ビルド: 成功、実行: 成功
カスタマイズの試み #2
- プロファイル: Silverlight 5 + .NET Framework 4.5 (プロファイル 24)
- すべての SL5 DLL をプロファイル 24 にコピーします。
- すべての SL5 DLL を再ターゲット可能としてマーク (遅延署名への変更)
- SL5 DLL 間のすべての参照を再ターゲット可能としてマークします
- ReSharper: すべての拡張メソッドの解決に失敗しました。ジェネリック型/値の一致でエラーが発生しました
- ビルド: 成功、実行: 成功
カスタマイズの試み #3
- プロファイル: Silverlight 4 + .NET Framework 4.0.3 (プロファイル 18)
- SL4 mscorlib.dll をプロファイル 18 にコピーします。
- SL4 mscorlib.dll を再ターゲット可能としてマークします (遅延署名への変更)
- ReSharper: 成功
- ビルド: 成功、実行: 成功
カスタマイズの試み #4
- プロファイル: Silverlight 4 + .NET Framework 4.0.3 (プロファイル 18)
- すべての SL4 DLL をプロファイル 18 にコピーします
- すべての SL4 DLL の .NET ランタイム バージョンを v4 に設定します (元の DLL にはそれがあり、影響は不明です)。
- すべての SL4 DLL を再ターゲット可能としてマーク (遅延署名への変更)
- SL4 DLL 間のすべての参照を再ターゲット可能としてマークします
- ReSharper: 成功
- ビルド: 成功、実行: 成功
カスタマイズ試行 #5継承 #4
- プロファイル: Silverlight 4 + .NET Framework 4.0.3 (プロファイル 18)
- SL4 の System.Numerics (他の SL プロファイルに含まれる) を RedistList\FrameworkList.xml に追加します。
- SL4 の System.Xml.XPath (どの SL プロファイルにも含まれていません) を RedistList\FrameworkList.xml に追加します。
- 結果: デフォルトの PCL 参照から System.Numerics および System.Xml.XPath を解決できません
- 修正: 両方の DLL を手動で参照する - 強制的に再ターゲット可能にすることはできませんが、VS は以下の問題により、再ターゲット不可の System.Numerics または System.Xml.XPath ではコンパイルされません。
ノート:
- コンパイル エラー: "... 参照されていないアセンブリで定義されています。アセンブリへの参照を追加する必要があります"。すべてのアセンブリが再ターゲット可能になった後に発生しますが、それらの間の参照の 1 つが「再ターゲット可能」に変更されていません。
ある程度は機能しますが、参照されている既存の DLL をカスタマイズしたり、新しいものを追加したりするのは非常に面倒です。