[.NET] WPF は ILMerge できない (続)
正確には、 画面の XAML 定義が入っている複数のアセンブリを ILMerge でマージすると実行時エラーになる、 です。
Microsoft Connect: FeedbackID=525042
WPFのプログラムをILMergeでまとめると、実行時にエラーになります
2010/01/14
この現象は私も経験していて、 まぁそういう仕様なんだと理解しています。 画面だけ 1プロジェクトに集めてしまえばいいわけで、 ASP.NET と同じようなもんだと。
今回、 気になってもう少し探してみたところ、 どうやら XAML をコンパイルして出来上がる BAML ファイルのフォーマットが非公開なので、 ILMerge が (に限らず、 他のマージツールも) 対応できない、 ということみたいです。
Microsoft の XAML/WPF Team でアーキテクトをしている Rob Relyea 氏が、 いくつか回答しています。
.NET Development Forums: Code Protection and Licensing of WPF Applications.
August 16, 2007
The major problem today with Obfuscators and WPF application is BAML. The markup compiler encodes type references in .baml and those baml files get embedded inside of the assembly.
Windows Live: Obfuscation and Xaml/Baml
2007/8/16
Unfortunately, we don't have the baml format published (as we think we will need to change it) and don't have an adequate API to help obfuscators.
ここでは Obfuscation (難読化) について言っていますが、 フォーマットが分からないのではマージすることもまた出来ません。
ちなみに、 XAML を使わずに、 コードだけで画面を実装すればマージできるはずですが、 そんな苦労をするよりも素直に 1プロジェクトに画面を集めたほうが楽でしょう。 そうすると、 UI とロジックは分離することになるし。
(2010/1/28 追記)
予想通り、 "by design" という回答が付いていました。
WPF compiles XAML into BAML during compilation. The BAML has explicit references to types and assemblies. Combining multiple dll/exes into one breaks since the BAML is not updated.
Unfortunately, fixing this will likely require a change to BAML, we cannot make this change at this time.
WPF は、コンパイル中に XAML を BAML にコンパイルします。 BAML は、タイプやアセンブリを明示的に参照します。 複数の DLL や EXE を1つにまとめると、BAML が更新されないため、破損してしまいます。
残念ながら、こちらを修正するには BAML を変更しなければならない可能性が高いため、私たちは、現時点でこの変更を実現することはできません。
やはり、 BAML を触らなきゃマージできないのがネックになっているようです。
| 固定リンク
「プログラミング」カテゴリの記事
- 【.NET / Win8.1 ストアアプリ】 HttpClient で TLS 1.1 / 1.2 に対応するには(2018.06.17)
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- 【.NET Core】 プロジェクトを作ると 「project.assets.json が見つかりません」 エラー(2018.02.10)
- 【#UWP】 ビットマップの表示色を変える (Win2D.uwp 経由で Direct2D を使う)(2017.08.23)
- 【#UWP】 CompactOverlay モード: Picture in Picture というか、「最前面に表示」するウィンドウを作る(2017.08.16)
「* プログラミング ( WPF )」カテゴリの記事
- 【VS2017 15.7pv2】 XAML のランタイム ツールに 「ヒートマップ」 が増えた(2018.03.28)
- [VS2010] (続) オプション 「生成されたコードから結果を表示しない」 の挙動不審(2011.08.24)
- う~む… .NET Framework 4 になっても、 IE を操作するのはめんどくさいままなのか!(2010.12.04)
- MSDN マガジン、読んでますか!?(2010.05.27)
- [WPF] 盾アイコン付きのボタンを作る (続)(2010.02.20)
この記事へのコメントは終了しました。
コメント