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 Class) 在 System System.Compiler.Ir2md.SetupMetadataWriter(String debugSymbolsLocation) 在 System.Compiler.Ir2md.WritePE(Module module, String debugSymbolsLocation, BinaryWriter writer) 在 System.Compiler.Writer.WritePE(String在 ILMerging.ILMerge 的 System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module) 中的位置、布尔 writeDebugSymbols、模块模块、布尔 delayS ign、String keyFileName、String keyName)。

阅读此异常提示 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

我认为 ILMerge 实际上不能与纯 .NET 程序集一起使用,尤其是当 Windows Phone 8 和 WinRT 项目使用引用的本机库时——这可能是找不到“Windows”未解析的程序集。

于 2013-03-16T23:10:02.640 回答
2

该错误表明 ILMerge 找不到平台的 Windows.winmd。在编译 Windows Phone 或 Windows Store 项目时,您主要针对两个方面进行编译;平台 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 回答