Ошибка при "Склеивании" dll с помощью ilmerge
Цитата: Makism от 28.09.2022, 19:04Всем привет, такая проблема, использую ilmerge для склеивания dll файлов, но после обновления windows до 11, происходит исключение
An exception occurred during merging: Unresolved assembly reference not allowed: WindowsBase. в System.Compiler.Ir2md.GetAssemblyRefIndex(AssemblyNode assembly) в System.Compiler.Ir2md.GetTypeRefIndex(TypeNode type) в System.Compiler.Ir2md.VisitReferencedType(TypeNode type) в System.Compiler.Ir2md.VisitField(Field field) в System.Compiler.Ir2md.Visit(Node node) в System.Compiler.Ir2md.VisitClass(Class Class) в System.Compiler.Ir2md.Visit(Node node) в System.Compiler.Ir2md.VisitModule(Module module) в System.Compiler.Ir2md.SetupMetadataWriter(String debugSymbolsLocation) в System.Compiler.Ir2md.WritePE(Module module, String debugSymbolsLocation, BinaryWriter writer) в System.Compiler.Writer.WritePE(String location, Boolean writeDebugSymbols, Module module, Boolean delaySign, String keyFileName, String keyName) в System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module) в System.Compiler.Module.WriteModule(String location, CompilerParameters options) в ILMerging.ILMerge.Merge() в ILMerging.ILMerge.Main(String[] args)пробовал вручную указывать версию .net с помощью targetplatform, но после этого появилось новое исключение "Не удалось привести тип объекта "System.Compiler.Class" к типу "System.Compiler.DelegateNode""
установленные версии .NETFramework c 4.0 до 4.8
Всем привет, такая проблема, использую ilmerge для склеивания dll файлов, но после обновления windows до 11, происходит исключение
An exception occurred during merging: Unresolved assembly reference not allowed: WindowsBase. в System.Compiler.Ir2md.GetAssemblyRefIndex(AssemblyNode assembly) в System.Compiler.Ir2md.GetTypeRefIndex(TypeNode type) в System.Compiler.Ir2md.VisitReferencedType(TypeNode type) в System.Compiler.Ir2md.VisitField(Field field) в System.Compiler.Ir2md.Visit(Node node) в System.Compiler.Ir2md.VisitClass(Class Class) в System.Compiler.Ir2md.Visit(Node node) в System.Compiler.Ir2md.VisitModule(Module module) в System.Compiler.Ir2md.SetupMetadataWriter(String debugSymbolsLocation) в System.Compiler.Ir2md.WritePE(Module module, String debugSymbolsLocation, BinaryWriter writer) в System.Compiler.Writer.WritePE(String location, Boolean writeDebugSymbols, Module module, Boolean delaySign, String keyFileName, String keyName) в System.Compiler.Writer.WritePE(CompilerParameters compilerParameters, Module module) в System.Compiler.Module.WriteModule(String location, CompilerParameters options) в ILMerging.ILMerge.Merge() в ILMerging.ILMerge.Main(String[] args)
пробовал вручную указывать версию .net с помощью targetplatform, но после этого появилось новое исключение "Не удалось привести тип объекта "System.Compiler.Class" к типу "System.Compiler.DelegateNode""
установленные версии .NETFramework c 4.0 до 4.8
Цитата: Никита от 29.09.2022, 00:37Привет, @katrg
Если можешь, скинь нужные для склейки файлы, попробую у себя на 10 склеить своей графической надстройкой над ILMerge
Привет, @katrg
Если можешь, скинь нужные для склейки файлы, попробую у себя на 10 склеить своей графической надстройкой над ILMerge
Цитата: Makism от 01.10.2022, 00:09Прошу прощения за задержу, я проверил с помощью виртуальной машины, та же самая ошибка. Ничего не понимаю
Прошу прощения за задержу, я проверил с помощью виртуальной машины, та же самая ошибка. Ничего не понимаю
Цитата: Makism от 01.10.2022, 01:30Нашёл корень проблемы. Из-за одного dll не хотел склеивать, но раньше всё работало
Нашёл корень проблемы. Из-за одного dll не хотел склеивать, но раньше всё работало
Цитата: Adler от 01.10.2022, 07:06Приветствую.
А вы уверены, что та .dll тоже на С# написана? Именно ее раньше "склеивали"?
Приветствую.
А вы уверены, что та .dll тоже на С# написана? Именно ее раньше "склеивали"?
Цитата: Makism от 01.10.2022, 12:08Я использую Windows API Code Pack Shell для выбора папок. И честно говоря не уверен что он полностью написан на C#
Я использую Windows API Code Pack Shell для выбора папок. И честно говоря не уверен что он полностью написан на C#
Цитата: Adler от 01.10.2022, 12:53ilmerge и другие "склеиватели" умеют склеивать только библиотеки, скомпилированные под .Net (С#, F#, VB.Net), т.к. они работают на уровне промежуточного IL кода. Если библиотека не .Net она не может быть "склеена".
P.S. Если речь о Microsoft-WindowsAPICodePack-Shell, то она на C#, НО не все библиотеки могут быть "склеены" (не знаю точно с чем связано, но с таким сталкивался).
Еще, вместо ILMerge, можете попробовать ILRepack. Это хоть и древняя программа, но вполне рабочая.
Или, попробуйте еще подключить Costura.Fody. Это автоматический "склеиватель" (достаточно просто установить через Nuget), но он заметно увеличивает размер конечного файла.
ilmerge и другие "склеиватели" умеют склеивать только библиотеки, скомпилированные под .Net (С#, F#, VB.Net), т.к. они работают на уровне промежуточного IL кода. Если библиотека не .Net она не может быть "склеена".
P.S. Если речь о Microsoft-WindowsAPICodePack-Shell, то она на C#, НО не все библиотеки могут быть "склеены" (не знаю точно с чем связано, но с таким сталкивался).
Еще, вместо ILMerge, можете попробовать ILRepack. Это хоть и древняя программа, но вполне рабочая.
Или, попробуйте еще подключить Costura.Fody. Это автоматический "склеиватель" (достаточно просто установить через Nuget), но он заметно увеличивает размер конечного файла.
Цитата: Makism от 01.10.2022, 16:19Благодарю за ответ, попробую
Благодарю за ответ, попробую