Не удается заставить ILMerge создать однофайловое консольное приложение, которое работает

Я пытаюсь создать однофайловый исполняемый файл. Код основан на .Net, а также зависит от некоторых дополнительных библиотек, включая SQLite.

Когда я компилирую исходный код, все соответствующие файлы помещаются в каталог Release, хотя DLL SQLite (sqlite3.dll) помещается в подкаталог (x86). Я думаю, это происходит потому, что я использую SQLite-raw, и он «выплевывает» как x86, так и x64 копии DLL.

Моя начальная командная строка:

ILMerge /out:GEDtoRH.all.exe GEDtoRH.exe *.dll /target:exe /targetplatform:"v4,C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5.2" /wildcards /log

Это приводит к следующему выводу, который меня беспокоит:

AssemblyResolver: Assembly 'System.Runtime.WindowsRuntime' is referencing assembly 'System.Runtime'.
        ...
        AssemblyResolver: Did not find assembly in framework directory.
AssemblyResolver: Unable to resolve reference. (It still might be found, e.g., in the GAC.)

AssemblyResolver: Assembly 'System.Runtime.WindowsRuntime' is referencing assembly 'System.Threading.Tasks'.
        ...
        AssemblyResolver: Did not find assembly in framework directory.
AssemblyResolver: Unable to resolve reference. (It still might be found, e.g., in the GAC.)

AssemblyResolver: Assembly 'System.Runtime.WindowsRuntime' is referencing assembly 'System.IO'.
        ...
        AssemblyResolver: Did not find assembly in framework directory.
AssemblyResolver: Unable to resolve reference. (It still might be found, e.g., in the GAC.)

Location for referenced module 'sqlite3' is ''
  1. Должен ли я беспокоиться о неразрешенных ссылках? Причина, по которой я спрашиваю, заключается в том, что готовый исполняемый файл не работает. Он прерывается с исключением нулевой ссылки (ссылка на объект не указывает на экземпляр объекта) в этой строке:

file = await StorageFile.GetFileFromPathAsync(filename);

Необъединенная версия исполняемого файла работает нормально :( Это не "имя файла", которое сломано, поскольку я пытался добавить некоторые дополнительные тесты, и это нормально.

  1. Как бы я ни пытался добавить sqlite3.dll в список вещей для загрузки, если я попытаюсь, ILMerge просто жалуется на ошибку «Не удалось загрузить сборку».

person Philip Colmer    schedule 05.06.2016    source источник


Ответы (1)


Поскольку SQLite не является библиотекой .NET, он не содержит IL для слияния.

person Michaël Hompus    schedule 05.06.2016
comment
Спасибо - это имеет смысл :) Могу ли я что-нибудь сделать, чтобы создать один исполняемый файл, который также содержит код из SQLite dLL? - person Philip Colmer; 06.06.2016