2013-10-02 1 views
0

Я пытаюсь объединить библиотеку в другую библиотеку с ILMERGE.Выход ILMERGE меньше, чем объединенная библиотека

Основная сборка составляет около 33 килобайт, сборка, которая будет слита с ней, составляет около 5 Мб. После слияния новая сборка составляет 1,2 Мб.

Я хотел бы, чтобы какая-то помощь в понимании журнала из слияния, потому что я не думаю, что объединенная сборка должна быть намного меньше.

Вот лог:

ILMerge версия 2.13.307.0 Copyright (C) Microsoft Corporation 2004-2006. Все права защищены. ILMerge /lib:C:\Windows\Microsoft.NET\Framework\v4.0.30319/lib: C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ PublicAssemblies/t: dll/log: merge. log/zeropekind /targetplatform:v4,C:\Windows\Microsoft.NET ||Framework\v4.0.30319 /out:ericsconnectionsM.dll ericsconnections_32.dll chilkatdotnet45.dll Установите платформу на 'v4', используя каталог 'C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319' для mscorlib.dll Бег на Microsoft (R) .NET Framework v4.0.30319 mscorlib.dll версия = 4.0.0.0 список входных сборок: ericsconnections_32.dll chilkatdotnet45 .dll Попытка прочитать сборку из файла 'C: \ Users \ eervawo \ Documents \ Visual Studio 2010 \ Projects \ EricsConnections \ EricsConnections \ bin \ Debug \ ericsconnections_32.dll'. Успешно прочитано в сборке. Не сообщалось об ошибках в метаданных EricsConnections_32. Пытается прочитать сборку из файла 'C: \ Users \ eervawo \ Documents \ Visual Studio 2010 \ Projects \ EricsConnections \ EricsConnections \ bin \ Debug \ chilkatdotnet45.dll'. Не удается найти файл PDB. Информация об отладке не будет доступна для сборки 'chilkatdotnet45.dll'. Успешно прочитано в сборке. Не сообщалось об ошибках в метаданных ChilkatDotNet45. Проверка того, что все входные сборки имеют совместимый PeKind. EricsConnections_32.PeKind = ILonly, Requires32bits ChilkatDotNet45.PeKind = 0 Эффективный PeKind для 'ChilkatDotNet45' будет считаться: ILonly Всех входные узлы имеют совместимое значение PeKind. AssemblyResolver: сборка «EricsConnections_32» ссылается на сборку «System.Xml.Linq». AssemblyResolver: попытка ссылки на каталог сборки. AssemblyResolver: Не удалось найти сборку в справочнике по сборке. AssemblyResolver: попытка ввода каталога ввода. AssemblyResolver: Не удалось найти сборку в каталоге ввода. AssemblyResolver: Попытка каталога, поставляемого пользователем. Исправлена ​​ссылка на сборку 'System.Xml.Linq' на 'C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Xml.Linq.dll'. (Используется клиентский каталог.) Не удается найти файл PDB. Информация об отладке не будет доступна для сборки «System.Xml.Linq». AssemblyResolver: сборка «EricsConnections_32» ссылается на сборку «System.Core». AssemblyResolver: попытка ссылки на каталог сборки. AssemblyResolver: Не удалось найти сборку в справочнике по сборке. AssemblyResolver: попытка ввода каталога ввода. AssemblyResolver: Не удалось найти сборку в каталоге ввода. AssemblyResolver: Попытка каталога, поставляемого пользователем. Исправлена ​​ссылка на сборку 'System.Core' на 'C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Core.dll'. (Используется клиентский каталог.) Не удается найти файл PDB.Информация об отладке не будет доступна для сборки «System.Core». Использование сборки 'EricsConnections_32' для атрибутов уровня сборки для целевой сборки. Сборка сборника «EricsConnections_32» в сборку цели. Сборка сборки «ChilkatDotNet45» в сборку цели. Атрибут уровня сборки 'System.Security.AllowPartiallyTrustedCallersAttribute' из сборки 'ChilkatDotNet45' удаляется из целевой сборки Копирование 8 ресурсов Win32 из сборки 'EricsConnections_32' в сборку целей. Не сообщалось об ошибках в метаданных целевой сборки. ILMerge: Написание целевой сборки 'ericsconnectionsM.dll'. AssemblyResolver: Assembly 'System' ссылается на сборку 'System.Configuration'. AssemblyResolver: попытка ссылки на каталог сборки. Не удается найти файл PDB. Информация об отладке не будет доступна для сборки «System.Configuration». Исправлена ​​ссылка на сборку 'System.Configuration' на 'C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Configuration.dll'. (Используемый каталог справочного модуля.) Местоположение для ссылочного модуля 'KERNEL32.dll' is '' Местоположение для ссылочного модуля '' is '' Местоположение для ссылочной сборки 'mscorlib': 'C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ mscorlib.dll ' В метаданных mscorlib не сообщалось об ошибках. Местоположение для ссылочной сборки «Microsoft.VisualBasic»: «C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ Microsoft.VisualBasic.dll ' В метаданных Microsoft.VisualBasic не было ошибок. Местоположение для ссылочной сборки «System.Xml.Linq» является «C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Xml.Linq.dll ' В метаданных System.Xml.Linq не было ошибок , Местоположение для ссылочной сборки «System.Core» - это «C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Core.dll» Не сообщалось об ошибках в метаданных System.Core. Местоположение для ссылочной сборки «System.Data» - это «C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ System.Data.dll» В метаданных System.Data не было сообщений об ошибках. Местоположение для ссылочной сборки «Система» - это «C: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319 \ system.dll» В метаданных системы не было сообщений об ошибках. ILMerge: Готово.

Что происходит не так?

ответ

3

С веб-сайта компании:

Chilkat.NET компоненты написаны в управляемом Visual C++

более известный под своим собственным именем, C++/CLI. Который создает смешанный режим сборок, они не могут быть объединены. ILMerge не знает, как правильно обрабатывать неуправляемый код в такой сборке. Также примечательно, что аргумент командной строки/targetplatform неверен, он вызывает this failure mode.

+0

Если вы не можете объединить сборку в смешанном режиме, как я могу создать единую сборку с этой сборкой в ​​смешанном режиме? Есть ли способ добавить эту сборку в смешанном режиме в качестве ресурса? Но как я могу загрузить его? – Eric

+1

Вам нужно привыкнуть к идее, что вы не можете объединить сборки C++/CLI. Конечно, вы всегда можете объединить его в файл с именем * setup.exe *, наверняка вы видели это раньше. –

1

Я сдался на Илмерге. Попробуйте Costura.Fody. Просто установите пакет самородок (если использование диспетчера пакетов Install-Package Costura.Fody сделает трюк). Вот и все.

В следующий раз, когда вы построите, ваш результат .exe будет иметь все ссылки, объединенные в качестве ресурсов, и будет автоматически загружать их. Ваш выходной каталог по-прежнему будет содержать ссылки на DLL, но ваше приложение будет работать без них.

Поскольку вы, кажется, используете неконтролируемые библиотеки, возможно, вам придется установить некоторые параметры в файле FodyWeavers.xml (он будет добавлен в ваш проект при установке пакета самородок). Цитирование документации проекта:

Невозможно загрузить сборку смешанного режима так же, как управляемые сборки.

Поэтому, чтобы помочь Costura определить, какие сборки являются смешанными, и в какой среде их загрузить в , вы должны указать их имена в одном или обоих этих списках.

Не указывайте в именах .exe или .dll.

<Costura> 
    <Unmanaged32Assemblies> 
     Foo32 
     Bar32 
    </Unmanaged32Assemblies> 
    <Unmanaged64Assemblies> 
     Foo64 
     Bar64 
    </Unmanaged64Assemblies> 
</Costura> 

Не забудьте проверить проект page для других случаев использования.