簡體   English   中英

如何隱藏依賴的 Nuget 包?

[英]How can I hide dependent Nuget packages?

我有一個這樣的類庫項目文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>net6.0-windows</TargetFramework>
    <ImplicitUsings>enable</ImplicitUsings>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="InformationLog" Version="2.1.1" />
  </ItemGroup>

</Project>

我的類庫有各種公共類型,例如PublicClass1 Nuget 包InformationLog有一個名為Log的公共類型。 我的類庫需要在內部使用Log才能工作,但我不想讓我的類庫的用戶看到這種類型。 我希望人們可以訪問PublicClass1但不能訪問LogInformationLog中的任何其他類型或命名空間。

我可以將InformationLog保留為依賴項,強制引用我的類庫的項目也使用InformationLog nuget 包,我只是不希望該 Nuget 包中的類型可見。

理想情況下,我希望我的項目文件中有一些 XML 來解決這個問題。 像這樣的東西:

  <PackageReference Include="InformationLog" Version="1.9.0" Access="Private"/>

有沒有辦法做這樣的事情?

您可以使用PrivateAssets="compile"

<PackageReference Include="InformationLog" Version="1.9.0" PrivateAssets="compile"/>

NuGet 關於資產選擇的文檔有更多詳細信息。

您可以看到 Roslyn 和其他人也利用了這一點: https ://github.com/dotnet/roslyn-sdk/blob/1df5d394195ffcf6aab5b824ae420197ed1f0acc/src/Microsoft.CodeAnalysis.Testing/Microsoft.CodeAnalysis.Analyzer.Testing/Microsoft .CodeAnalysis.Analyzer.Testing.csproj#L58-L62

通過不將runtime資產設為私有,這意味着運行時資產將傳遞流動,並且依賴項將被復制到應用程序的bin/文件夾中,並避免在程序集調用依賴項上的 API 時出現 FileNotFound 異常。 但是由於compile資源對您的項目是私有的,因此它們不會傳遞,因此包使用者將無法直接調用包依賴項的 API,除非他們自己將 PackageReference 添加到同一個包,使其成為直接參考,而不是傳遞包。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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