2013-02-28 2 views
1

Я пытаюсь получить базовый проект 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)

ответ

1

Какую версию рамок вы используете? Существует опция targetplatform, которую вы можете установить, если используете, например, 4.0/4.5.

/targetplatform:version,platformdirectory

+0

Мои проекты используют 4,0, так что я поставил следующий флаг: '/ targetplatform: v4, C: \ Program Files (x86) \ Reference \ Сборки \ Microsoft \ Framework \ .NETFramework \ v4.0' , но я все равно ничего не получил. – Joseph

+0

Также попробовал '/ targetplatform: v4, c: \ Windows \ Microsoft.NET \ Framework \ v4.0.30319' и продолжать получать ту же ошибку. – Joseph

+0

Моя проблема заключалась в том, что .dll нельзя просто добавить в качестве ссылки на проект.Библиотеки также должны быть импортированы в домашнее решение и повторно добавлены в ссылки на проект с помощью «Ссылки-> Добавить ссылки ...-> Решение-> Проекты». В противном случае ссылочное местоположение кажется жестко закодированным. – Joseph