7

У меня есть библиотека классов C#, которая ссылается на System.Data.SQLite (from nuget). Это структура моей папки бен после сборки:Visual Studio - установка InstallShield в проекте с System.Data.SQLite

  • MyProject.dll
  • System.Data.SQLite.dll
  • x86/SQLite.Interop.dll
  • x64/SQLite.Interop .dll

System.Data.SQLite нуждается в SQLite.Interop для запуска и правильный DLL находится во время выполнения. Однако, когда я создаю установку с InstallShield, которая включает основной вывод проекта, папки x86 и x64 не копируются и мое приложение не запускается.

Есть какой-либо способ заставить Visual Studio включить x86 и x64 папки на основном выходе?

Существует ли способ включить папки вручную в InstallShield с относительной пути?

Моя среда:

  • Visual Studio 2012 Professional
  • Установить Shield 2013 Limited Edition (Free)
  • System.Data.SQLite 1.0.96
+0

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

+0

К сожалению, папки x64 и x86 управляются пакетом Nuget, поэтому единственный способ, которым я нашел, - использовать абсолютный путь. Он работает, но каждый разработчик должен будет настроить его на своем собственном компьютере. Было бы здорово, если бы я мог использовать относительный путь, но я не нашел, как со свободной версией. – Rafael

+1

@ Rafael Просто так вы знаете. Вы можете вручную изменить файл setup.isl с 'c: \ yourpath \ packages \ System.Data.SQLite.Core.1.0.94.0 \ build \ net40 \ x86 \ SQLite.Interop.dll' на' <ISProjectFolder>. . \ packages \ System.Data.SQLite.Core.1.0.94.0 \ build \ net40 \ x86 \ SQLite.Interop.dll' (или где бы вы ни располагали ваш SQLite.Interop) – Markus

ответ

0

Да, есть способ добавить/развернуть папки через Instal lShield. На вкладках «Файлы» вы можете добавить файлы/папку. При добавлении этих файлов вы также можете установить относительный путь. Просто установите свойство с помощью пути и используйте это свойство в своем относительном пути. Поэтому, где вы хотите скопировать эти файлы (ссылки для DLL), вы можете добавить эту структуру папок через InstallShield, и вы можете добавить в нее файлы.

0

Я просто столкнулся с той же проблемой, используя VS2013/Installshield LE; В итоге я решил изменить пакет NuGet на своей машине, чтобы НЕ создать папку x86 для SQLite.interop.dll в папке сборки.

Для этого зайдите в папку "packages \ System.Data.SQLite.Core.1.0.104.0 \ build" в каталоге проекта. Затем выберите подпапку, относящуюся к версии .NET, на которую настроен таргетинг, и откройте файл «System.Data.SQLite.Core.targets» в текстовом редакторе. Вы захотите удалить все ссылки на «%(RecursiveDir)» ЗА ИСКЛЮЧЕНИЕМ в разделе «SQLite Interop Library Content Items». Сохраните, очистите и перестройте - dll interop теперь должен находиться в той же папке, что и основной исполняемый файл/etc, а Installshield должен автоматически включать его в качестве зависимости.

Если он не отображается в нужном месте, попробуйте отредактировать файл .target другой версии .NET, пока не нажмете справа.