我想提供一个我创建的项目的NuGet包,但是我有一些问题"隐藏" depencies。
以下配置是否可行?
要删除所有NuGet依赖项并隐藏B类依赖项,我尝试了以下操作:
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>netstandard2.0</TargetFramework>
</PropertyGroup>
<!-- PrivateAssets to remove NuGet depencies -->
<ItemGroup>
<ProjectReference Include="..\A.csproj" PrivateAssets="All" />
<ProjectReference Include="..\B.csproj" PrivateAssets="All" />
</ItemGroup>
<ItemGroup>
<BuildOutputInPackage Include="$(OutputPath)A.dll" />
<!-- B is hidden, so not included -->
</ItemGroup>
问题在于,在运行时,内部NuGet代码崩溃,因为它无法找到依赖关系B及其依赖关系。 (这很明显,因为DLL不存在。)
答案 0 :(得分:0)
PrivateAssets="All"
实际上只有在对该包具有构建时依赖性时才有意义。
您想要的是控制B的资产流入项目本身。 这意味着你想禁止消费者对B进行编码。
实现此目的的方法是使用ExcludeAssets="compile"
而不是PrivateAssets。
所以你会得到以下结果:
<ItemGroup>
<ProjectReference Include="..\A.csproj"/>
<ProjectReference Include="..\B.csproj" ExcludeAssets="compile" />
</ItemGroup>