CefSharp不尊重包参考配置吗?

问题描述 投票:0回答:1

我有一个项目,需要针对多个版本的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>

当我在'Debug 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引用(仍然有条件)运行另一项测试,并且我的确在输出中获得了v65 dll ...那些名为'Debug 2017'的配置如何将其评估为true?

cefsharp csproj
1个回答
0
投票

[再进行一些研究后,我就知道了,这要归功于this link。显然,包引用不支持仅在目标框架(ugh)上进行配置的条件。根据本文的解决方法,您可以使用“选择/何时”执行此操作。这是我最终似乎可以正常工作的结果:

  <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>
  </Choose>
  <Choose>
    <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>
© www.soinside.com 2019 - 2024. All rights reserved.