簡體   English   中英

如何在我的新 CSPROJ 類庫中包含帶有本機 dll 的 NuGet 包?

[英]How can I include a NuGet package with native dlls in my new CSPROJ Class Library?

我有一個類庫,我剛剛將其遷移到新的csproj格式,該格式依賴於SQLite.Core

SQLite具有本機依賴項x64/SQLite.Interop.dllx86/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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM