У меня возникла, как мне кажется, проблема, которая была описана изначально. У меня есть приложение Winform и консольное приложение как два отдельных проекта, но один проект установки обрабатывает оба.
И приложение Winform, и консольное приложение используют одни и те же две внешние сборки: одна не является частью решения (ссылка на файл в папке), а другая - из проекта класса C # (ссылка на проект).
Я обнаружил, что установщик предполагает, что выходные данные проекта объединены в единую папку на установочной машине. Следовательно, все общие сборки также будут совместно размещаться с исполняемыми файлами, которые в них нуждаются. Поэтому, если вы добавляете вывод проекта из первого исполняемого файла в папку, вот почему вы видите, что появляются все его зависимости, а затем, когда добавляется вывод второго проекта, появятся только сборки, которые еще не добавлены.
Неважно, создаете ли вы подпапки в папке приложения, Visual Studio, похоже, рассматривает папку приложения как единое целое ... что касается вывода проекта (exe, dll и res).
Есть два способа решить эту проблему. Первый - создать отдельный установочный проект для каждого исполняемого файла. В большом проекте может быть много проектов по настройке.
Если вы хотите сохранить все в одной установке, лучшим вариантом является использование GAC для общих сборок, что описано в другой статье о переполнении стека здесь: Используйте проект установки Visual Studio для автоматической регистрации и GAC библиотеки DLL COM Interop
MSI может выполнить свою работу. Щелкните правой кнопкой мыши «Файловая система на целевой машине», «Добавить», «GAC». Щелкните правой кнопкой мыши добавленную папку, «Добавить», «Вывод проекта». Это гарантирует, что сборка закрыта.
На мой взгляд, GAC - лучшее решение, потому что ваши сборки управляются уровнем .NET, если вы позже внесете в них изменения и улучшения. Одним из преимуществ .NET является устранение старых проблем, связанных с «адом DLL», которые были в Win 98 и предыдущих версиях Windows. Я настоятельно рекомендую использовать его для вашего общего кода.
person
John J Schultz
schedule
15.07.2012