0

我正在使用 Visual Studio 2017。当我创建一个针对 .NET 4.5、4.5.1、4.5.2、4.6 或 4.7.2 的新控制台应用程序并添加 NuGet 包 System.Buffers 版本 4.4.0 或 4.5.0 时我构建的输出目录中只有一个 DLL,即 System.Buffers dll。当我以 4.7.1 为目标并重建它时,它里面有 17 个系统 dll。如果我以 .NET 4.6.1、4.6.2 或 4.7 为目标,则输出目录中有 101 个系统 dll,即使我将 System.Buffers 的“复制本地”设置为 false,也会发生这种情况。所有默认引用的默认值 Copy Local = false 以及 Microsoft.CSharp、System、System.Core、System.Data、System.Data.DataSetExtension、System.Net.Http、System.Xml 和 System.Xml。林克。当我安装 System.Buffers 4.3.0 时,不会发生 100 个系统 dll 出现在输出目录中的问题。

我想以 .NET 4.6.2 为目标,并想使用最新的 MongoDB 驱动程序,该驱动程序需要最新的 DNSClient,它需要 System.Buffers <=4.4.0,但我不明白为什么我现在在输出中需要 101 个额外的系统 DLL目录,有没有办法在不改变 .NET 目标的情况下解决这个问题?

System.IO.dll 的 MSBuild 输出示例:

1>从项目“{redacted}\ConsoleApp2\ConsoleApp2\ ConsoleApp2.csproj”(目标“ResolveReferences”取决于它):

1>使用程序集“Microsoft.Build.Tasks.Core,Version=15.1.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a”中的“ResolveAssemblyReference”任务。

1>任务“解决AssemblyReference”

1> 统一主引用“System.IO, Version=4.1.2.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”。

1> 在“C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\netfx 中使用此版本而不是原始版本“4.0.0.0” .force.conflicts.dll”,因为 AutoUnify 为“真”。

1> 解析的文件路径为 "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.IO.dll"

1> 在搜索路径位置“{HintPathFromItem}”找到参考。

1> 此引用不是“CopyLocal”,因为至少有一个源项目将“私人”设置为“假”,并且没有源项目将“私人”设置为“真”。

1> 此参考的 ImageRuntimeVersion 是“v4.0.30319”。

...

1>从项目“{redacted}\ConsoleApp2\ConsoleApp2”文件“C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets”中的目标“_CopyFilesMarkedCopyLocal” \ConsoleApp2.csproj”(目标“CopyFilesToOutputDirectory”取决于它):

1>使用程序集“Microsoft.Build.Tasks.Core, Version=15.1.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a”中的“复制”任务。

1>任务“复制”

1> 将文件从“C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\lib\System.IO.dll”复制到“bin\Debug \System.IO.dll”。

4

0 回答 0