Visual studio 2012 Visual Studio-在带有System.Data.SQLite的项目中安装Shield安装程序

Visual studio 2012 Visual Studio-在带有System.Data.SQLite的项目中安装Shield安装程序,visual-studio-2012,dll,installshield,system.data.sqlite,installshield-le,Visual Studio 2012,Dll,Installshield,System.data.sqlite,Installshield Le,我有一个C#类库,可以引用。这是生成后my bin文件夹的结构: MyProject.dll System.Data.SQLite.dll x86/SQLite.Interop.dll x64/SQLite.Interop.dll System.Data.SQLite需要运行SQLite.Interop,并且在运行时找到正确的dll。但是,当我使用InstallShield生成包含项目主输出的安装程序时,不会复制x86和x64文件夹,并且我的应用程序无法运行 有没有办法强制Visual St

我有一个C#类库,可以引用。这是生成后my bin文件夹的结构:

  • 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专业版
  • 安装Shield 2013限量版(免费)
  • System.Data.SQLite 1.0.96

是的,有一种方法可以通过InstallShield添加/部署文件夹。在“文件”选项卡下,可以添加文件/文件夹。在添加这些文件时,您还可以在此对话框中设置相对路径。只需使用路径设置属性,并在相对路径中使用该属性。所以,如果您想将这些文件复制到哪里(DLL的参考位置),可以通过InstallShield添加该文件夹结构,并在其中添加文件

我刚刚使用VS2013/Installshield LE遇到了同样的问题;最后,我选择在我的计算机上更改NuGet包,不在build文件夹下为SQLite.interop.dll创建x86文件夹

为此,请查看项目目录下的“packages\System.Data.SQLite.Core.1.0.104.0\build”文件夹。然后选择与目标.NET版本相关的子文件夹,并在文本编辑器中打开“System.Data.SQLite.Core.targets”文件。您需要删除对“
%”(RecursiveDir)
”的所有引用,但“
SQLite互操作库内容项”部分除外。保存、清理和重建-互操作dll现在应该与主可执行文件/etc位于同一文件夹中,Installshield应该能够自动将其作为依赖项包含


如果它没有显示在正确的位置,请尝试编辑其他.NET版本的.target文件,直到找到正确的文件。

这些听起来像是依赖项,而不是主要输出,但请记住输出组是为了方便而不是控制。如果你想完全控制你的设置,最好是静态选择文件。不幸的是,x64和x86文件夹是由Nuget软件包管理的,所以我找到的唯一方法就是使用绝对路径。它可以工作,但每个开发人员都必须在自己的计算机中进行配置。如果我可以使用相对路径,那就太好了,但我并没有发现如何使用免费版本。@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所在的位置)我希望您已经尝试过将目标平台设置为64位或32位(解决方案资源管理器->右键单击项目->属性->构建),而不是任何CPU来强制x86或x64。还要检查输出路径。有关更多详细信息,请参阅