[英]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
但不能访问Log
或InformationLog
中的任何其他类型或命名空间。
我可以将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.