Я пытаюсь получить базовый проект VS 2012, работающий с ILMerge, поэтому я могу перейти к более сложным примерам (и в конечном итоге смогу использовать его с моим реальным проектом).Получение базового рабочего места ILMerge
В настоящее время у меня есть рабочий проект, TestMain
и справочная библиотека, TestDLL
в рабочем проекте.
Мой рабочий каталог (.. \ Bin \ Release) выглядит следующим образом:
- ILMerge.exe
- TestDLL.dll
- TestDLL.pdb
- TestMain.exe
- TestMain .exe.config
- TestMain.pdb
- TestMain.vshost.exe
- TestMain.vshost.exe.config
- TestMain.vshost.exe.manifest
Мой терминальный вывод заключается в следующем:
C:...\bin\Release>ilmerge /target:winexe /out:ContainedProgram.exe "TestMain.exe" "TestDLL.dll"
An exception occurred during merging: ILMerge.Merge: Could not load assembly from the location 'C:...\bin\Release\TestMain.exe'. Skipping and processing rest of arguments. at ILMerging.ILMerge.Merge()
at ILMerging.ILMerge.Main(String[] args)
Довольно просто, не так ли? Что мне здесь не хватает?
Обновление: Удаление EXE и запуск ILMerge только при работе с библиотекой. Удаление .dll и запуск его только с помощью исполняемого файла не изменяет вывод ошибки.
Я также сделал второй .dll и был в состоянии использовать ILMerge объединить две существующие библиотеки в один со следующим:
ilmerge /targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:Test.dll "TestDLL2.dll" "TestDLL.dll"
Update 2 Так что я был в состоянии создать TestRun.exe со следующим:
ilmerge /targetplatform:v4,c:\Windows\Microsoft.NET\Framework\v4.0.30319 /out:TestRun.exe "TestMain.exe" "Test.dll"
Это взяло две справочные библиотеки .dll, упакованные вместе и упакованные вместе с моим исполняемым файлом. И это сработало! Я смог получить ожидаемые результаты.
До того, как я перевела свой новый исполняемый файл из своей домашней папки.
Как только я переехал его на новое место, исполнение произведена эта ошибка:
Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'TestDLL, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' or one of its dependencies. The system cannot find the file specified.
at TestMain.Program.Main(String[] args)
Мои проекты используют 4,0, так что я поставил следующий флаг: '/ targetplatform: v4, C: \ Program Files (x86) \ Reference \ Сборки \ Microsoft \ Framework \ .NETFramework \ v4.0' , но я все равно ничего не получил. – Joseph
Также попробовал '/ targetplatform: v4, c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319' и продолжать получать ту же ошибку. – Joseph
Моя проблема заключалась в том, что .dll нельзя просто добавить в качестве ссылки на проект.Библиотеки также должны быть импортированы в домашнее решение и повторно добавлены в ссылки на проект с помощью «Ссылки-> Добавить ссылки ...-> Решение-> Проекты». В противном случае ссылочное местоположение кажется жестко закодированным. – Joseph