首页 > 解决方案 > 如何在不遇到 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 收到这些警告。

标签: c#.net.net-standard

解决方案


推荐阅读