c# - 如何在不遇到 DLL 版本冲突的情况下从 .NET Framework 库中引用 .NET Standard 库?
问题描述
我编写了一个 .NET Framework (4.61) 库,它引用了一个 .NET Standard 2.0 库(在 NuGet 包中)。但是,每当我这样做时,在使用 MSBuild 构建时都会遇到 DLL 版本冲突:
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\Microsoft.NET.Build.Extensions.ConflictResolution.targets(33,5): message NETSDK1041: Encountered conflict between 'Reference:System.IO.Compression' and 'Platform:System.IO.Compression.dll'. NETSDK1033: Choosing 'Reference:System.IO.Compression' because AssemblyVersion '4.2.0.0' is greater than '4.0.0.0'. [C:\path\to\Company.Project.csproj]
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\Microsoft.NET.Build.Extensions.ConflictResolution.targets(33,5): message NETSDK1041: Encountered conflict between 'Platform:System.IO.Compression.dll' and 'CopyLocal:C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.IO.Compression.dll'. NETSDK1033: Choosing 'CopyLocal:C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.IO.Compression.dll' because AssemblyVersion '4.2.0.0' is greater than '4.0.0.0'. [C:\path\to\Company.Project.csproj]
C:\Program Files\dotnet\sdk\NuGetFallbackFolder\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.Compression.dll
CopyLocal=false
ExternallyResolved=true
Facade=true
FusionName=System.IO.Compression, Version=4.1.3.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
ImageRuntime=v4.0.30319
NuGetPackageId=NETStandard.Library
NuGetPackageVersion=2.0.3
OriginalItemSpec=C:\Program Files\dotnet\sdk\NuGetFallbackFolder\netstandard.library\2.0.3\build\netstandard2.0\ref\System.IO.Compression.dll
Private=false
ReferenceSourceTarget=ResolveAssemblyReference
ResolvedFrom={RawFileName}
Version=
Visible=false
C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.IO.Compression.dll
CopyLocal=false
FusionName=System.IO.Compression, Version=4.2.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089
HintPath=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.IO.Compression.dll
ImageRuntime=v4.0.30319
OriginalItemSpec=System.IO.Compression
Private=false
ReferenceAssembly=C:\Program Files (x86)\Microsoft Visual Studio\2017\BuildTools\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.IO.Compression.dll
ReferenceSourceTarget=ResolveAssemblyReference
ResolvedFrom={HintPathFromItem}
Version=4.2.0.0
使用 .NET Framework 库中的 .NET Standard 库应该很常见,对吧?有什么我做错了吗?我需要用一堆绑定重定向制作 App.config吗?对于应该开箱即用的用例来说,这似乎是一大堆麻烦。显然我可以<AutoGenerateBindingRedirects>true</AutoGenerateBindingRedirects>
在这种情况下将一个元素放入我的 .csproj 中?
此外,我只从我的构建服务器上的 MSBuild 收到这些警告,而不是从我的开发机器上的 Visual Studio 2017 收到这些警告。
解决方案
推荐阅读
- windows - 在 Windows 上通过 gnu make 用空字符串替换点
- android - 如何在 AndroidX 上使用该库?
- java - 回调驱动的 Spring Cloud Dataflow 源码应用
- oracle - 从另一个表 oracle 中选择匹配的字符串
- visual-studio - 如何在 Visual Studio 中强制自动完成(在 ENTER 上)?
- php - PHP 仅在几分钟内显示
- cmake - catkin_make 的 cmake 错误,ROS 安装
- sql - 正则表达式在 teradata 查询中不以给定后缀结尾的字符串
- google-apps-script - 在 G Suite 帐户上安装开发者 gmail 插件
- matlab - 在箱线图中显示特定的中值