Nuget不尊重包引用配置?
我有一个项目需要针对CefSharp的多个版本(它是使用CefSharp并指定版本的父级插件)。使用对NuGet包的包引用,我的.csproj文件中有以下内容: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
<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
编辑
我仍然有一个小问题与'否则'块,所以我把它切换到两个'当'块与相反的条件。看起来不太干净,但似乎效果更好