.Net Framework 4.7 控制台应用程序引用 .NET 核心 dll - 输出目录中的意外文件

.Net Framework 4.7 console app references .NET core dll - unexpected files in output directory

我有一个 .NET Framework 控制台应用程序 (.Net Framework 4.7),它引用了一个 .NET Core dll (.Net Standard 2.0)。 .Net 核心 dll 在 NETStandard.Library.

之外不使用任何内容

我注意到 /bin/Debug 目录中有一些意想不到的文件。经过一番调查后,我确定这些不是来自任何引用的包,而是从

复制的
C:\Program Files (x86)\Microsoft Visual Studio\Preview\Community\MSBuild\Microsoft\Microsoft.NET.Build.Extensions\net461\ref

此目录的内容因我们使用的机器而异,导致不同的 DLL 最终出现在输出目录中。这使得调试过程不一致。

现在我已经弄清楚是什么导致了问题,我想知道这是什么原因,以及是否有办法防止它发生,即只在项目中引用包复制到 /bin/Debug

为了让 .NET Standard 库在 .NET Framework 上工作,这些文件是预期的,甚至是必需的。它们包含必要的类型转发定义,以便在运行时可以正确加载每个程序集 - 例如,库可以从 netstandard.dll(.NET Standard >= 2.0)或 System.Runtime.dll 引用 System.Object (.NET 标准 < 2.0)。输出文件中的其他程序集会将类型重定向到 .NET Framework 的 mscorlib.dll.

this GitHub issue 回答了类似的问题。

请注意,即将推出的 .NET Framework 4.7.1 将具有所有必需的类型定义并开箱即用,因此一旦项目以 4.7.1 为目标,就不会向项目的输出文件夹中添加其他程序集。