3

ILMerge.exe (2.12.0803) を使用して Windows Phone 8 用の .net アセンブリをマージしようとしています。単独では、すべてのアセンブリが正常に動作します。次のように、 Windows.Networking名前空間への参照を含まないアセンブルを正常にマージできます。

.\ILMerge.exe /lib:"%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\WindowsPhone\v8.0" /out:.\WP8\%1\MathToolbox.dll .\%1\MathBase.dll .\%1\PolyFunctions.dll

次のように Windows.Networking 名前空間を使用する DLL をインクルードしようとするとすぐに:

.\ILMerge.exe /lib:"%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\WindowsPhone\v8.0" /out:.\WP8\%1\MathToolbox.dll .\%1\MathBase.dll .\%1\PolyFunctions.dll .\%1\RemoteTools.dll

次の例外が発生しています。

マージ中に例外が発生しました: 未解決のアセンブリ参照は許可されていません: Windows。System.Compiler.Ir2md.GetAssemblyRefIndex(AssemblyNode アセンブリ) で System.Compiler.Ir2md.GetTypeRefIndex(TypeNode 型) で System.Compiler.Ir2md.VisitReferencedType(TypeNode 型) で System.Compiler.Ir2md.VisitClass(Class クラス) で System.Compiler.Ir2md.VisitClass(Class クラス) で.Compiler.Ir2md.VisitModule (モジュール モジュール) System.Compiler.Ir2md.SetupMetadataWriter (文字列 debugSymbolsLocation) で System.Compiler.Ir2md.WritePE (モジュール モジュール、文字列 debugSymbolsLocation、BinaryWriter ライター) で System.Compiler.Writer.WritePE (文字列) location、Boolean writeDebugSymbols、Module module、Boolean delaySign、String keyFileName、String keyName) の System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module) at ILMerging.ILMerge.

この例外を読んでみると、ILMerge が Windows.Networking アセンブリを見つけられないことがわかります。次のようなさまざまなフラグを ILMERGE に追加しようとしました。

.\ILMerge.exe /lib:"%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\WindowsPhone\v8.0" /targetplatform:v4,"%ProgramFiles(x86)%\Reference Assemblies\Microsoft\Framework\Silverlight \v4.0\Profile\WindowsPhone71" /out:.\WP8\%1\MathToolbox.dll .\%1\MathBase.dll .\%1\PolyFunctions.dll .\%1\RemoteTools.dll

しかし、それでも同じ例外が発生します。誰かに何か提案があれば、大歓迎です。

4

2 に答える 2

2

特にWindows Phone 8およびWinRTプロジェクトが参照されたネイティブライブラリを使用している場合、ILMergeは実際には純粋な.NETアセンブリ以外では機能しないと思います-「Windows」の未解決のアセンブリが見つからない可能性があります。

于 2013-03-16T23:10:02.640 に答える
2

このエラーは、ILMerge がプラットフォームの Windows.winmd を見つけられないことを示しています。Windows Phone または Windows ストア プロジェクトをコンパイルするときは、主に 2 つのものに対してコンパイルします。プラットフォーム SDK (WinRT) と .NET SDK。これらのアセンブリ上で実行されるツールには、両方が必要です。

.NET アセンブリ フォルダーを渡すだけでなく、"C:\Program Files (x86)\Windows Phone Kits\8.0\Windows Metadata directory" を lib 引数として渡してみてください。

ILMerge は古いバージョンの CCI ( http://ccimetadata.codeplex.com/ )に基づいているため、上記を行った後でも、.NET とはわずかに異なる WinRT メタデータ形式を使用する際に問題が発生する可能性があることに注意してください。

于 2013-08-02T16:14:57.570 に答える