【发布时间】:2022-01-26 19:19:24
【问题描述】:
我有一个简单参考的 .csproj 项目。
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="12.0">
...
<ItemGroup>
<Reference Include="System.Net.Http" />
</ItemGroup>
...
我还有用于 NuGet 参考的 project.json
{
"dependencies": {
"SomePackage": "1.1.1-beta",
},
"runtimes": {
"win": {}
},
...
使用此设置可以正常工作。 但是最近“SomePackage”开始依赖另一个包,它通过一堆传递依赖依赖于 NETStandard.Library" version="1.6.1"
<package xmlns="http://schemas.microsoft.com/packaging/2012/06/nuspec.xsd">
<metadata>
<id>Microsoft.Extensions.Configuration</id>
<version>1.1.0</version>
<dependencies>
<group targetFramework=".NETStandard1.1">
<dependency id="Microsoft.Extensions.Configuration.Abstractions" version="1.1.0" />
<dependency id="NETStandard.Library" version="1.6.1" />
</group>
</dependencies>
</metadata>
</package>
NETStandard.Library 依赖于较新版本的 System.Net.Http 4.1.0.0
当我编译项目时,程序集开始直接引用新版本 System.Net.Http。
然后它当然开始在运行时请求这个 dll。
我针对 .net 4.6.2 进行编译,Microsoft.Extensions.Configuration 针对 .Net 标准 1.1 进行编译。所以它应该在安装了 4.6.2 的机器上工作。 但是4.6.2不包含这个新版本的System.Net.Http 4.1.0.0
所以我的问题是如何阻止 NuGet 和 MsBuild 将我的程序集的直接引用升级到我使用的包的传递依赖项的版本?
谢谢。
【问题讨论】:
-
我发现这是由于 MsBuild 中的 AutoUnify 功能所致。但关于 AutoUnify 的信息很少。并且不清楚如何关闭它。