Ошибка ILMerge Windows Phone 8 Неразрешенная ссылка на сборку
Я пытаюсь объединить некоторые сборки.net для Windows Phone 8, используя ILMerge.exe (2.12.0803). Самостоятельно все сборки работают нормально. Я могу успешно объединить сборки, которые не содержат ссылок на пространство имен Windows.Networking следующим образом:
. \ ILMerge.exe / lib: "% ProgramFiles (x86)% \ Справочные сборки \Microsoft\Framework\WindowsPhone\v8.0" /out:.\WP8\%1\MathToolbox.dll .\%1\MathBase.dll .\%1\PolyFunctions.dll
Как только я попытаюсь включить DLL, которая использует пространство имен Windows.Networking следующим образом:
. \ ILMerge.exe / lib: "% ProgramFiles (x86)% \ Справочные сборки \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.CompditClassI.Compiler.Ir2md.VisitModule(модуль Module) в System.Compiler.Ir2md.SetupMetadataWriter(String debugSymbolsLocation) в System.Compiler.Ir2md.WritePE(модульный модуль, строковый debugSymbolsLocation (запись в BinaryWriter). расположение, логическое writeDebugSymbols, модуль Module, логическое delayS ign, String keyFileName, String keyName) в System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, модуль Module) в ILMerging.ILMerge.Merge() в ILMerging.ILMerge.Main(] args)
После прочтения предложенных исключений ILMerge не может найти сборки Windows.Networking. Я попытался добавить различные различные флаги в ILMERGE, включая:
. \ ILMerge.exe / lib: "% ProgramFiles (x86)% \ Справочные сборки \Microsoft\Framework\WindowsPhone\v8.0" /targetplatform:v4,"%ProgramFiles(x86)%\ Справочные сборки \Microsoft\Framework\Silverlight\v4.0\Profile\WindowsPhone71" /out:.\WP8\%1\MathToolbox.dll .\%1\MathBase.dll .\%1\PolyFunctions.dll .\%1\RemoteTools.dll
Но все равно получите то же исключение. Если у кого-то есть какие-либо предложения, которые будут с благодарностью.
2 ответа
Я не думаю, что ILMerge на самом деле работает с другими сборками, кроме чистых.NET, особенно когда в проектах Windows Phone 8 и WinRT используются собственные библиотеки, на которые есть ссылки, - это может быть не найденная неразрешенная сборка "Windows".
Ошибка указывает на то, что ILMerge не может найти Windows.winmd платформы. При компиляции проекта Windows Phone или Windows Store вы компилируете две основные вещи; Платформа SDK (WinRT) и.NET SDK. Любые инструменты, работающие над этими сборками, будут нуждаться в обоих.
В дополнение к передаче папки сборки.NET попробуйте передать в качестве аргумента lib "C:\Program Files (x86)\Windows Phone Kits\8.0\ Каталог метаданных Windows".
Обратите внимание, что ILMerge основан на более старой версии CCI ( http://ccimetadata.codeplex.com/), поэтому даже после выполнения вышеописанного может возникнуть проблема с использованием формата метаданных WinRT, который немного отличается от.NET.