我有一個這樣的類別庫專案檔案:
<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作為依賴項,強制參考我的類別庫的專案也使用InformationLognuget 包,我只是不希望該 Nuget 包中的型別可見。
理想情況下,我希望我的專案檔案中有一些 XML 來解決這個問題。像這樣的東西:
<PackageReference Include="InformationLog" Version="1.9.0" Access="Private"/>
有沒有辦法做這樣的事情?
uj5u.com熱心網友回復:
您可以使用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 添加到同一個包,使其成為直接參考,而不是傳遞包。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/495855.html
