根据此处记录的推荐解决方案是在您的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>
SDK风格项目更新
在新的SDK项目风格中,解决嵌套项目和包之间依赖项的方式发生了变化。在构建过程中,会解析资源并生成一个obj\project.assets.json
文件,列出来自各种依赖项的资源。然后使用项目资产文件确定要导入哪些目标以及需要将哪些文件复制到输出目录中。
然而,从非直接依赖项中包含资产的方式有所不同。build
文件夹中的目标文件不会从非直接依赖项中导入。旧的解决方法依赖于将System.Data.SQLite.Core.targets
导入到父项目中。直接依赖于System.Data.Sqlite
的项目可以通过在PackageImport
中添加PrivateAssets="none"
来覆盖此行为。您还需要将其添加到依赖链中的每个PackageImport或ProjectReference中。但是,您无需将其与先前的解决方法组合使用。
概述:
对于直接引用System.Data.Sqlite的项目,将PrivateAssets="none"
添加到您的PackageImport中。
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.112" PrivateAssets="none"/>
对于您依赖链中的每个项目,直到您的根项目,也要添加PrivateAssets="none"
。
<ProjectReference Include="..\MyProject.csproj" PrivateAssets="none"/>
PrivateAssets="none"
添加到链中的每个依赖项即可解决问题!这也可以在 VS UI 中作为 NuGet 引用的属性使用。请注意,在链中的最后一个非 SDK 样式项目中,我什么都没有做,它也起作用了。 - Nicolas