7

より多くのクラスとメンバーを 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 をカスタマイズしたり、新しいものを追加したりするのは非常に面倒です。

4

2 に答える 2