在引用的项目

时间:2015-09-17 20:43:14

标签: sqlite nuget system.data.sqlite

我在Visual Studio 2015中使用System.Data.SQLite核心版本:1.0.98.1 nuget包。当我构建引用我的System.Data.SQLite包的项目时,它会复制两个文件夹(x86和x64)包含SQLite.Interop.dll到输出目录。但是,当我构建我的测试项目或任何其他引用前面提到的项目的项目时,这些文件夹不会被复制到父项目的输出目录,并且我在SQLite.Interop.dll上得到一个DllNotFoundException。

注意:特别是当引用System.Data.SQLite的项目被另一个项目

引用时

2 个答案:

答案 0 :(得分:25)

作为doumented here推荐的解决方案是在packages \ System.Data.SQLite.Core.1.0.98.1 \ build \ [您的框架版本]中创建System.Data.SQLite.Core.targets.user这里]包含

的文件夹
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    <PropertyGroup> 
        <ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>
        <CopySQLiteInteropFiles>false</CopySQLiteInteropFiles>
        <CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles>
        <CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles>
    </PropertyGroup>
</Project>

但是如果你不想在你的包文件夹中添加任何东西到你的源代码控制中,你可以直接将以下内容添加到你的项目文件中

<PropertyGroup> 
    <ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>
    <CopySQLiteInteropFiles>false</CopySQLiteInteropFiles>
    <CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles>
    <CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles>
</PropertyGroup>

答案 1 :(得分:0)

<ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>似乎对 .NET Standard 2.0 无效,其中SQLite.interop.dll仍未被视为引用项目中的内容或依赖项。

我希望有人为此找到更清洁的解决方案...

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <TargetFramework>netstandard20</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="System.Data.SQLite.Core" Version="1.0.112" GeneratePathProperty="true" />
  </ItemGroup>

  <ItemGroup>
    <!-- Fix to get SQLite.interop.dll copied when using netstandard -->
    <Content Include="$(PkgSystem_Data_SQLite_Core)\runtimes\win-x86\native\netstandard2.0\SQLite.Interop.dll" Link="x86\SQLite.Interop.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
    <Content Include="$(PkgSystem_Data_SQLite_Core)\runtimes\win-x64\native\netstandard2.0\SQLite.Interop.dll" Link="x64\SQLite.Interop.dll">
      <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    </Content>
  </ItemGroup>

</Project>