【问题标题】:Multi targetting net461 and netstandard - netstandard dependencies required even in net461 consumer多目标 net461 和 net standard - 即使在 net461 消费者中也需要 netstandard 依赖项
【发布时间】:2018-09-14 04:01:44
【问题描述】:

我正在开发一个类库,该类库同时针对 net461netstandard2.0

这个类库的依赖之一是Microsoft.ApplicationInsights

当它针对 just net461 时,我可以通过包管理器控制台或 nuget ui 添加对 Microsoft.ApplicationInsights (v2.4.0) 的引用,它会将自身添加为依赖项。

一旦我对 csproj 进行了多目标:

 <Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
  </PropertyGroup>

</Project>

...如果我尝试添加引用,它会要求我接受许多依赖项的许可协议。 当然,我确实这样做了。

当我将这个类库打包为 nuget 包时,我的问题就出现了。

即使我的消费应用程序以 net461 为目标,当我安装此软件包时,系统也会提示我安装所有 netstandard 依赖项 - 即使我的消费应用程序不以 netstandard 为目标。

有没有办法阻止我的net461 目标包需要netstandard 的所有依赖项?

【问题讨论】:

  • 嘿亚历克斯,我只是在本地尝试了这个,因为它不是我所期望的,我得到了不同的结果。当我创建一个net451 控制台应用程序并添加一个新的多目标包(如您在上面定义的)时,我只得到Microsoft.ApplicationInsightsSystem.Diagnostics.DiagnosticSource,没有NETStandard.Library。我错过了一步吗?
  • 我建议您查看 obj\project.assets.json 的内容以了解这些依赖项中的内容,因为您所描述的内容不会是应用洞察包。
  • 所以,这最终是由于包的上游依赖没有升级造成的!我已投票结束此问题。

标签: c# .net-standard .net-standard-2.0 multitargeting multi-targeting


【解决方案1】:

您是否尝试过在项目文件中使用条件来使某些依赖项特定于目标框架?我也遇到过类似的问题,虽然不是创建 nuget 包,但这有帮助。

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFrameworks>net461;netstandard2.0</TargetFrameworks>
  </PropertyGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
    <Reference Include="DependencyA" />
  </ItemGroup>

  <ItemGroup Condition=" '$(TargetFramework)' == 'netstandard2.0' ">
    <PackageReference Include="DependencyB" Version="1.0.0" />
  </ItemGroup>

</Project>

另一个想法是查看现有的开源项目,看看他们是如何解决它的。虽然使用Microsoft.ApplicationInsights 找到一个可能会比较棘手。

【讨论】:

  • 问题是,DependencyADependencyB 完全相同——包括相同的版本
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-10-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多