繁体   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