我有一个项目,需要针对多个版本的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?
[再进行一些研究后,我就知道了,这要归功于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>