多目标net461和netstandard-即使在net461使用者中也需要netstandard依赖项

时间:2018-06-25 15:18:29

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

我正在开发一个同时针对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的所有依赖关系?

1 个答案:

答案 0 :(得分:2)

您是否尝试过使用项目文件中的条件使某些依赖关系特定于目标框架?我遇到了类似的听起来问题,尽管没有创建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找到一个可能比较棘手。