Проект установщика VS 2010 не переносит общие ссылочные сборки на все выходные данные - PullRequest
5 голосов
/ 06 марта 2012

Я настраиваю проект установщика для решения C # и сталкиваюсь с проблемой зависимости:

В моем решении у меня есть 4 независимых вывода проекта - одна служба Windows и три исполняемых файла, которые делятся между собой некоторыми ссылками.

Мне нужно, чтобы установщик установил все четыре из них, чтобы решение работало.

Я установил папку установки для каждого вывода проекта в «Папке приложения» в диалоговом окне «Файловая система на целевом компьютере», успешно добавил вывод проекта службы Windows в свою папку. Но когда я продолжаю пытаться добавить выходные данные проекта исполняемых файлов в их папки, сборки, уже перенесенные в папку службы Windows, не переносятся в исполняемую папку, и после установки исполняемые файлы не запускаются, поскольку в них отсутствуют зависимости.

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

Есть идеи?

Ответы [ 2 ]

1 голос
/ 16 июля 2012

У меня возникла проблема, которая была первоначально описана. У меня есть приложение Winform и консольное приложение как два отдельных проекта, но один проект установки обрабатывает оба.

И приложение Winform, и приложение консоли используют одни и те же две внешние сборки: одна не является частью решения (ссылка на файл в папке), а другая - из проекта класса C # (ссылка на проект).

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

Неважно, если вы создаете подпапки в папке приложения, Visual Studio, по-видимому, обрабатывает папку приложения как единое целое ... в отношении вывода проекта (exe, dll и res).

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

Если вы хотите сохранить все в одной установке, лучшим вариантом является использование GAC для общих сборок, что описано в другой статье переполнения стека здесь: Использование Visual Studio Setup Project для автоматической регистрации и GAC COM Interop DLL

MSI может выполнить работу. Щелкните правой кнопкой мыши «Файловая система на целевой машине», Добавить, GAC. Щелкните правой кнопкой мыши по этой добавленной папке, Добавить, Вывод проекта. Тот гарантирует, что сборка заточена.

GAC - лучшее решение, на мой взгляд, потому что ваши сборки управляются уровнем .NET, если вы позже внесете в них изменения и улучшения. Одним из преимуществ .NET является устранение старых проблем с DLL-адом, которые были в Win 98 и предыдущих версиях Windows. Я настоятельно рекомендую использовать его для вашего общего кода.

1 голос
/ 06 марта 2012

Что ж, вам следует создать новый проект в решении и установить «установщик» в качестве вывода вашего основного приложения (или основных приложений), которое должно само решать зависимости.

...