如何在自定义NuGet包中为不同版本的.NET框架指定不同的依赖项?

时间:2016-02-10 14:47:53

标签: c# .net nuget

我试图创建一个依赖System.Net.Http的NuGet包(需要HttpClient)。对于框架版本4.5.1,此程序集是BCL的一部分。 Hoewever,在4.0中不是。我相信它已经正确编译了csproj中的正确条件语句。

我目前正在努力解决的问题是,当我在4.5.1项目中引用此包时,它会依赖Microsoft.Net.Http。我真的只想依靠Microsoft.Net.Http获取net40。

这是我的nuspec文件:

<?xml version="1.0"?>
<package>
  <metadata>
    <id>MyApp</id>
    <version>$version$</version>
    <title>MyApp</title>
    <authors>Me</authors>
    <owners>Me</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Description</description>
    <releaseNotes>Initial release</releaseNotes>
    <copyright>Copyright 2016</copyright>
    <dependencies>
      <group>
        <dependency id="Newtonsoft.Json" version="8.0.2"/>
      </group>
      <group targetFramework="net40">
        <dependency id="Microsoft.Bcl" version="1.1.10" />
        <dependency id="Microsoft.Bcl.Build" version="1.0.14" />
        <dependency id="Microsoft.Net.Http" version="2.2.29" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="bin\release\**\MyApp.dll" target="lib" />
  </files>
</package>

在VS中,NuGet包显示:

.NETFrameworkVersion=v4.0

但同样,我在使用目标框架4.5.1的项目时也会将这些依赖项纳入其中。这是我不想要的。任何帮助表示赞赏。

1 个答案:

答案 0 :(得分:6)

在按框架版本定义依赖关系时需要更具体。

<?xml version="1.0"?>
<package>
  <metadata>
    <id>MyApp</id>
    <version>$version$</version>
    <title>MyApp</title>
    <authors>Me</authors>
    <owners>Me</owners>
    <requireLicenseAcceptance>false</requireLicenseAcceptance>
    <description>Description</description>
    <releaseNotes>Initial release</releaseNotes>
    <copyright>Copyright 2016</copyright>
    <dependencies>
      <group targetFramework="net451">
        <dependency id="Newtonsoft.Json" version="8.0.2"/>
      </group>
      <group targetFramework="net40">
        <dependency id="Newtonsoft.Json" version="8.0.2"/>
        <dependency id="Microsoft.Bcl" version="1.1.10" />
        <dependency id="Microsoft.Bcl.Build" version="1.0.14" />
        <dependency id="Microsoft.Net.Http" version="2.2.29" />
      </group>
    </dependencies>
  </metadata>
  <files>
    <file src="bin\release\**\MyApp.dll" target="lib" />
  </files>
</package>

Both versions of framework

典型......在经过几个小时的挣扎之后,我在发布问题后得出了答案。