问题

假设一个工程有如下的结构

—-Demo sln

——–WPF

——–DataAccess

  • WPF 引用 DataAccess 项目

  • DataAccess项目引用nuget包System.Data.SQLite,

编译后

  • DataAccess输出文件夹存在System.Data.SQLite文件和X646和X86,内含SQLite.Interop.dll
  • WPF输出文件夹仅存在System.Data.SQLite文件,需要手动从DataAccess输出文件夹拷贝X646和X86文件夹

而且每次升级System.Data.SQLite nuget包后都需要重新拷贝一次,否则会因为版本不匹配而出现异常。

解决方法

在DataAccess.csproj 中添加

1
2
3
4
5
6
  <PropertyGroup> 
    <ContentSQLiteInteropFiles>true</ContentSQLiteInteropFiles>
    <CopySQLiteInteropFiles>false</CopySQLiteInteropFiles>
    <CleanSQLiteInteropFiles>false</CleanSQLiteInteropFiles>
    <CollectSQLiteInteropFiles>false</CollectSQLiteInteropFiles>
  </PropertyGroup>

参考

SQLite.Interop.dll files does not copy to project output path when required by referenced project Change nuget build targets to use ‘Content’ rather than ‘Copy’ and ‘Delete’