[英]How can I include a NuGet package with native dlls in my new CSPROJ Class Library?
我有一個類庫,我剛剛將其遷移到新的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>
由於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
資產,所以沒關系。
有關更多詳細信息,請參閱控制依賴資產。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.