2014-09-24 89 views
1

我有使用SQLite的C#应用​​程序。它已经工作,但我一直在玩它,它不再工作,我不知道什么是错的: -/部署C#SQLite应用程序

它编译好,但我有问题“无法加载”System.Data.SQLite.dll '或它的一个依赖关系(在非开发计算机上)这是一个在安装过程中启动的服务,所以安装因此错误而失败

因此我添加了System.data.sqlite参考。 86" 和‘再在解决方案资源管理64’: -/

包管理器控制台显示它的安装:

PM> Install-Package System.Data.Sqlite 
Attempting to resolve dependency 'System.Data.SQLite.Core (≥ 1.0.94.0)'. 
Attempting to resolve dependency 'System.Data.SQLite.Linq (≥ 1.0.94.1)'. 
Attempting to resolve dependency 'System.Data.SQLite.EF6 (≥ 1.0.94.0)'. 
Attempting to resolve dependency 'EntityFramework (≥ 6.1.1.0)'. 
'System.Data.SQLite 1.0.94.1' already installed. 
QLog already has a reference to 'System.Data.SQLite 1.0.94.1'. 

PM> 

我把它添加到WXS:

(...) 
<Component Id="System.Data.SQLite.dll" Guid="{BCA7E1B7-CA34-4B1C-829F-29D4F135912E}"> 
    <File Id="System.Data.SQLite.dll" Source="..\QLog\bin\x86\Release\System.Data.SQLite.dll" Vital="yes" KeyPath="yes" DiskId="1"/> 
</Component> 


<Directory Id='dir_x86' Name='x86'> 
    <Component Id='x86' Guid='{C2869DAC-B3CC-4E87-AEF2-74F76025CFD9}'> 
    <CreateFolder /> 
     <File Id='x86' Name='SQLite.Interop.dll' Source='..\QLog\packages\System.Data.SQLite.Core.1.0.94.0\build\net45\x86\SQLite.Interop.dll' /> 
    </Component> 
</Directory> 
<Directory Id='dir_x64' Name='x64'> 
    <Component Id='x64' Guid='{452F3E46-B1E6-4A5A-B2CB-C7DA9B7EAB51}'> 
    <CreateFolder /> 
    <File Id='x64' Name='SQLite.Interop.dll' Source='..\QLog\packages\System.Data.SQLite.Core.1.0.94.0\build\net45\x64\SQLite.Interop.dll' /> 
    </Component> 
</Directory> 
(...) 

有没有“64”,并在解决方案资源管理器中的“x86”的文件夹,因为它们在教程,但“参照”下,我可以看到system.data.sqlite(不够声誉的图像)。

我甚至尝试安装sqlite-netfx45到部署机器,但它也没有帮助。

任何想法? : -/

+1

尝试突出显示参考。去porperties并确保CopyLocal设置为true。然后确保将Sqlite Dll复制到实时环境中 – 2014-09-24 13:03:05

回答

1

我必须指出,没有 “86”,并不再在解决方案资源管理器 “64”: -/

的应用程序部署,看起来是这样的:

  • \ App.exe(可选,可管理的应用程序可执行程序集)
  • \ App.dll(可选,受管理的应用程序库程序集)
  • \ System.Data.SQLite。 dll(必需,可管理的核心组件)
  • \ System.Data.SQLite.Linq.dll(可选,仅受管理的LINQ程序集)
  • \ System.Data.SQLite.EF6.dll(可选,managed-仅EF6组件)
  • \ 86 \ SQLite.Interop.dll(需要,X86天然互操作组件)
  • \ 64 \ SQLite.Interop.dll(需要,64本地互操作组件)
+0

我从安装程序中删除了自动启动,现在安装程序不会终止。我可以在安装后看到文件/文件夹结构,除了“ProgramFilesFolder”(而不是REAL Program Files),它看起来好像(检查图片),Interop文件存在于x86和x64文件夹中。它存在于服务中,但不会启动(与上述相同的原因)。图片:http://imgur.com/a/iAqBw。任何想法,为什么它不工作? : - $为什么没有“ProgramFilesFolder”关键字将其放入适当的文件夹? : - / – May11 2014-09-25 12:02:41

0

我发现了这个问题。新版本不需要在构建项目时指定x86目标。只需选择AnyCPU。