Как указать разные зависимости для разных версий the.NET фреймворк в пользовательском пакете NuGet?

Я пытаюсь создать пакет NuGet, который имеет зависимость от System.Net.Http (нужен HttpClient). Для framework версии 4.5.1 эта сборка является частью BCL. Однако в 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="binrelease**MyApp.dll" target="lib" />
  </files>
</package>

в VS пакет NuGet показывает следующее:

.NETFrameworkVersion=v4.0

но опять же, я эти зависимости также втягиваются при использовании проекта с целевой платформой 4.5.1. Чего я не хочу. Любая помощь приветствуется.

1 ответов


необходимо быть более конкретным при определении зависимостей по версии фреймворка.

<?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

Типичный... после борьбы с этим в течение нескольких часов я придумываю ответ через несколько минут после публикации вопроса.