Nuget не уважает конфиг пакета? - PullRequest
0 голосов
/ 03 октября 2019

У меня есть проект, который должен быть нацелен на несколько версий CefSharp (это надстройка к родителю, который использует CefSharp и определяет версии). У меня есть следующее в моем файле .csproj с использованием ссылок на пакеты NuGet:

<PackageReference Include="cef.redist.x64" Condition="'$(Configuration)' == 'Debug 2020' Or '$(Configuration)' == '2020'">
  <Version>3.3325.1758</Version>
</PackageReference>
<PackageReference Include="CefSharp.Common" Condition="'$(Configuration)' == 'Debug 2020' Or '$(Configuration)' == '2020'">
  <Version>65.0.1</Version>
</PackageReference>
<PackageReference Include="CefSharp.Wpf" Condition="'$(Configuration)' == 'Debug 2020' Or '$(Configuration)' == '2020'">
  <Version>65.0.1</Version>
</PackageReference>
<PackageReference Include="cef.redist.x64" Condition="'$(Configuration)' != 'Debug 2020' And '$(Configuration)' != '2020'">
  <Version>3.2987.1601</Version>
</PackageReference>
<PackageReference Include="CefSharp.Common" Condition="'$(Configuration)' != 'Debug 2020' And '$(Configuration)' != '2020'">
  <Version>57.0.0</Version>
</PackageReference>
<PackageReference Include="CefSharp.Wpf" Condition="'$(Configuration)' != 'Debug 2020' And '$(Configuration)' != '2020'">
  <Version>57.0.0</Version>
</PackageReference>

Когда я собираю это в конфигурации «Отладка 2017», это ДОЛЖНО дать мне версию 57.0.0, но я получаю следующее:65.0.1 все вокруг. Если я удаляю ссылки на 65 в целом, но ничего не делаю с условиями или конфигурацией сборки, то теперь это выглядит так:

<PackageReference Include="cef.redist.x64" Condition="'$(Configuration)' != 'Debug 2020' And '$(Configuration)' != '2020'">
  <Version>3.2987.1601</Version>
</PackageReference>
<PackageReference Include="CefSharp.Common" Condition="'$(Configuration)' != 'Debug 2020' And '$(Configuration)' != '2020'">
  <Version>57.0.0</Version>
</PackageReference>
<PackageReference Include="CefSharp.Wpf" Condition="'$(Configuration)' != 'Debug 2020' And '$(Configuration)' != '2020'">
  <Version>57.0.0</Version>
</PackageReference>

Я получаю версию 57. Это здорово, но для сборок 2020 мне это нужнона ссылку 65.0.1 ... Почему не соблюдается условие ??

Логически, исходя из второго теста, условия v57 должны быть оценены как true, потому что он создает и выдает, когда ссылки v65не там. Это заставило бы меня поверить, что лучшие из них оценивают как истинные и «побеждают», давая мне v65. Однако операторы условия являются логическими противоположностями и взаимоисключающими, не так ли? Это означало бы, что они НЕ МОГУТ быть правдой ... Чего мне не хватает?

РЕДАКТИРОВАТЬ

Проведен еще один тест с использованием только ссылок v65 (с условиямивсе еще) и я получаю dll v65 в выходных данных ... Как они могут быть оценены как истинные с конфигурацией с именем 'Debug 2017'?

1 Ответ

1 голос
/ 03 октября 2019

Хорошо, после некоторого дополнительного исследования я понял это благодаря этой ссылке . Очевидно, что ссылки на пакеты не поддерживают настройку при настройке, только на целевой платформе (тьфу). В качестве обходного пути для статьи вы можете использовать Выбор / Когда это сделать. Вот то, что я закончил с этим, похоже, работает:

 <Choose>
    <When Condition="'$(Configuration)' == 'Debug 2020' Or '$(Configuration)' == '2020'">
      <ItemGroup>
        <PackageReference Include="cef.redist.x64">
          <Version>3.3325.1758</Version>
        </PackageReference>
        <PackageReference Include="CefSharp.Common">
          <Version>65.0.1</Version>
        </PackageReference>
        <PackageReference Include="CefSharp.Wpf">
          <Version>65.0.1</Version>
        </PackageReference>
      </ItemGroup>
    </When>
    <When Condition="'$(Configuration)' != 'Debug 2020' And '$(Configuration)' != '2020'">
      <ItemGroup>
        <PackageReference Include="cef.redist.x64">
          <Version>3.2987.1601</Version>
        </PackageReference>
        <PackageReference Include="CefSharp.Common">
          <Version>57.0.0</Version>
        </PackageReference>
        <PackageReference Include="CefSharp.Wpf">
          <Version>57.0.0</Version>
        </PackageReference>
      </ItemGroup>
    </When>
  </Choose>

Редактировать

У меня все еще были небольшие проблемы с блоком «В противном случае», поэтому япереключил его на два блока «Когда» с противоположными условиями. Выглядит не так чисто, но, кажется, работает лучше ...

...