首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >复杂NuGet依赖管理

复杂NuGet依赖管理
EN

Stack Overflow用户
提问于 2018-06-06 16:01:07
回答 1查看 173关注 0票数 0

我想提供我创建的一个项目的NuGet包,但是我有一些“隐藏”依赖项的问题。

是否可以进行下列配置?

  • 不要将项目引用作为NuGet依赖项。
  • 允许使用者使用依赖项A中的代码。
  • 对使用者完全隐藏依赖项B。

为了删除所有NuGet依赖项并隐藏B类型的依赖项,我尝试了以下操作:

代码语言:javascript
复制
<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不存在。)

EN

回答 1

Stack Overflow用户

发布于 2018-06-06 18:43:05

只有当您对该包具有构建时依赖关系时,PrivateAssets="All"才有意义。

您想要的是控制B的资产流入项目本身。这意味着您想不允许消费者对B进行编码。

实现这一目标的方法是使用ExcludeAssets="compile"而不是PrivateAssets。

https://learn.microsoft.com/en-us/nuget/consume-packages/package-references-in-project-files#controlling-dependency-assets

这样你就可以得到以下信息:

代码语言:javascript
复制
<ItemGroup>
    <ProjectReference Include="..\A.csproj"/>
    <ProjectReference Include="..\B.csproj" ExcludeAssets="compile" />
</ItemGroup>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50724816

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档