代码之家  ›  专栏  ›  技术社区  ›  MarcF

ILMerge错误Windows Phone 8未解析的程序集引用

  •  3
  • MarcF  · 技术社区  · 11 年前

    我正在尝试使用ILMerge.exe(2.12.0803)合并Windows Phone 8的一些.net程序集。就其本身而言,所有程序集都可以正常工作。我可以成功合并不包含对的引用的程序集 Windows.Networking 命名空间如下:

    .\ILMerge.exe/lib:“%ProgramFiles(x86)%\参考 程序集\Microsoft\Framework\WindowsPhone\v8.0“ /输出:。\WP8\%1\MathToolbox.dll。\%1\MathBase.dll。\1\PolyFunctions.dll

    一旦我尝试包括一个使用Windows.Networking的DLL,如下所示:

    .\ILMerge.exe/lib:“%ProgramFiles(x86)%\参考 程序集\Microsoft\Framework\WindowsPhone\v8.0“ /输出:。\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.VisitModule(模块模块)位于 System.Compiler.Ir2md.SetupMetadataWriter(字符串调试符号位置) at System.Compiler.Ir2md.WritePE(模块模块,字符串 debugSymbolsLocation,BinaryWriter编写器)位于 System.Compiler.Writer.WritePE(字符串位置,布尔值 writeDebugSymbols,模块模块,布尔延迟符号,字符串 keyFileName,字符串keyName) System.Compiler.Writer.WritePE(编译器参数CompilerParameters, 模块模块)位于的ILMerging.ILMerge.Merge() ILMerging.ILMerge.Main(String[]参数)

    读取此异常后,suggets ILMerge无法定位Windows.Networking程序集。我尝试将各种不同的标志添加到ILMERGE中,包括:

    .\ILMerge.exe/lib:“%ProgramFiles(x86)%\参考 程序集\Microsoft\Framework\WindowsPhone\v8.0“/targetplatform:v4,”%ProgramFiles(x86)%\Reference Assemblys\Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPPhone71“ /输出:。\WP8\%1\MathToolbox.dll。\%1\MathBase.dll。\1\PolyFunctions.dll .\%1\RemoteTools.dll

    但仍然有同样的例外。如果有人有任何建议,我们将不胜感激。

    2 回复  |  直到 11 年前
        1
  •  2
  •   Martin Suchan    11 年前

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

        2
  •  2
  •   David Kean    11 年前

    该错误表明ILMerge找不到平台的Windows.winmd。编译Windows Phone或Windows应用商店项目时,主要根据两个方面进行编译;平台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元数据格式。