我有一个类库,我刚刚迁移到新的 csproj 格式,该格式依赖于SQLite.Core。
SQLite 具有本机依赖项x64/SQLite.Interop.dll
和x86/SQLite.Interoop.dll
,这些依赖项曾经被复制到添加我的包的任何项目的输出文件夹中。这由 NuGet 通过在旧的 csproj 文件中自动包含以下导入来处理:
<Import Project="..\packages\System.Data.SQLite.Core.1.0.106\build\net451\System.Data.SQLite.Core.targets" Condition="Exists('..\packages\System.Data.SQLite.Core.1.0.106\build\net451\System.Data.SQLite.Core.targets')" />
迁移到新的 csproj 之后,我可以将我的库构建为 NuGet 包,它正确地包含SQLite.Core作为依赖关系但是谁消耗我的 NuGet 库不会将本机依赖项提供给输出文件夹。
另一方面,如果消费者首先添加SQLite.Core,那么添加我的包,一切正常。
知道如何在迁移之前恢复行为吗?以下是迁移的 csproj :
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<PackageId>My.Library</PackageId>
<Description>Some Library.</Description>
</PropertyGroup>
<PropertyGroup>
<TargetFramework>net452</TargetFramework>
<AssemblyName>My Library</AssemblyName>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.106" />
</ItemGroup>
<ItemGroup>
<Reference Include="Microsoft.CSharp" />
</ItemGroup>
</Project>
答案 0 :(得分:2)
由于System.Data.SQLite.Core
使用构建时逻辑将包包含到内容中,因此如果构建引用该包的库,则PackageReference
的默认依赖项设置不适合。默认情况下,PackageReference
不会转发contentFiles,构建资产和分析器以进行传递引用。
要更改此行为,请将PackageReference
修改为:
<PackageReference Include="System.Data.SQLite.Core" Version="1.0.106" PrivateAssets="none"/>
这将确保在通过您的库直接或传递引用时,包的行为完全相同。在您的具体情况下,PrivateAssets
也可能是contentFiles;analyzers
,因为只需要转发build
,但由于该资产包只包含build
资产,因此无关紧要。< / p>
有关详细信息,请参阅Controlling dependency assets。