Създаване на един MSI за множество проекти

Имам 2 проекта. Искам да създам ЕДИН пакет за настройка на MSI, който ще инсталира и двата проекта.

В My Application Folder създадох 2 подпапки (Project A и Project B folder). Така че след инсталирането изходните данни на проекта ще бъдат в Program Files\MyProduct\Project A Program Files\MyProduct\Project B

Проблемът, който имам, е, че проект A и проект B препращат към някои общи сборки. Но тези общи сборки се копират само в папка Project A.

Има ли начин да принудите msi да копира общите сборки в папката Project A и Project B?


person pdiddy    schedule 30.12.2009    source източник
comment
не, шаблон за настройка от Visual Studio. Не знам какво е WiX   -  person pdiddy    schedule 30.12.2009


Отговори (2)


Изграждането на MSI инсталатори от Visual Studio, като част от процеса на изграждане, не винаги е най-гъвкавият метод. Аз лично използвам NSIS, тъй като е изключително мощен, но ако искате да създадете MSI инсталатори, предлагам ви да погледнете Wix.

Рядко позволявам на Visual Studio да прави неща вместо мен автоматично - обичам да съм ясен, когато става въпрос за деклариране кои dll са инсталирани и къде.

person Charlie Salts    schedule 30.12.2009
comment
Същото и това. Типът проект за настройка на Visual Studio е изключително ограничен. Ако искате да направите нещо подобно, ще искате да научите WiX или да закупите продукт на трета страна като InstallShield. Разгледах WiX накратко и открих, че е доста сложно за научаване (защото стандартът MSI е сложен). - person Josh Kodroff; 30.12.2009
comment
Разгледах за кратко и WiX. Добре изглежда, че ще получите повече гъвкавост = сложност. Но засега единствената ми опция е проектът за настройка на Visual Studio - person pdiddy; 30.12.2009
comment
@pdiddy - Прав си, гъвкавостта означава сложност. Но също така ще създадете ненужна сложност, като използвате грешен инструмент за работата. - person Charlie Salts; 30.12.2009

Във вашия проект за настройка предполагам, че имате две папки, по една за всеки проект. Изберете папката, в която липсват .dll(ите), и щракнете с десния бутон върху нея, натиснете Добавяне->Файл... и изберете .dll, който искате да принудите да бъде включен в изхода на проекта.

person Jacob Ewald    schedule 30.12.2009
comment
Мислех за това, но това ли е правилният начин? Бих искал MSI да открие, че изходът на проекта е преместен в някаква папка и че ще постави зависимостта директно. Но прави това само за един от проектите. С вашето решение каква dll би трябвало да използвам? Може да създавам настройка в DEBUG или в RELEASE, не искам ръчно да добавям съответния файл bin\Debug или bin\Release всеки път. Общите сборки също са библиотеки на проекти. - person pdiddy; 30.12.2009
comment
Доколкото разбирам за MSI, има само база данни с промени, които трябва да бъдат направени в целевата система и една от таблиците в базата данни съдържа списък с файлове за инсталиране. Вероятно има логика в потребителския интерфейс на проекта за настройка, която открива вашите общи сборки като вече включени, така че ги пропуска, когато добавите втория проект. Принуждавайки го да добави файла по начина, който описах, трябва да принуди друг запис в тази файлова таблица. - person Jacob Ewald; 30.12.2009