Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sql-server-2005/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Nuget不尊重包引用配置?_Nuget_Cefsharp_Csproj_Nuget Package Restore - Fatal编程技术网

Nuget不尊重包引用配置?

Nuget不尊重包引用配置?,nuget,cefsharp,csproj,nuget-package-restore,Nuget,Cefsharp,Csproj,Nuget Package Restore,我有一个项目需要针对CefSharp的多个版本(它是使用CefSharp并指定版本的父级插件)。使用对NuGet包的包引用,我的.csproj文件中有以下内容: <PackageReference Include="cef.redist.x64" Condition="'$(Configuration)' == 'Debug 2020' Or '$(Configuration)' == '2020'"> <Version>3.3325.1758</Version

我有一个项目需要针对CefSharp的多个版本(它是使用CefSharp并指定版本的父级插件)。使用对NuGet包的包引用,我的.csproj文件中有以下内容:

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

3.3325.1758
65.0.1
65.0.1
3.2987.1601
57.0.0
57.0.0
当我在“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>

3.2987.1601
57.0.0
57.0.0
我得到57版。这很好,但对于2020版本,我需要它参考65.0.1。。。为什么它不尊重条件

从逻辑上讲,根据第二次测试,v57条件必须评估为真,因为它在v65引用不存在时构建和输出。这会让我相信,排名靠前的球队也在评估,而且“获胜”给了我65分。然而,条件陈述在逻辑上是对立的,相互排斥的,不是吗?那就意味着他们不可能都是真的。。。我错过了什么

编辑


运行了另一个测试,其中只有v65引用(条件仍然存在),我在输出中得到了v65 DLL。。。使用名为“Debug 2017”的配置,这些如何评估为真?

经过一些额外的研究后,我终于明白了这一点。显然,包引用不支持配置条件,只支持目标框架(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>
    <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>

3.3325.1758
65.0.1
65.0.1
3.2987.1601
57.0.0
57.0.0
编辑

我仍然有一个小问题与'否则'块,所以我把它切换到两个'当'块与相反的条件。看起来不太干净,但似乎效果更好