在做了一些研究后,我所能找到的只是以前的SO门票和一些博客,最终他们最终都使用了相同的工作方式。然后我发现了一个
错误报告
有人在2011年提交了Microsoft Connect,最终在一年后左右被MSFT员工Chuck England回答。
的
TL; DR - 由于这个原因,球队做出了有意识的决定
多目标
功能已添加到VS2008
</强>
(能够更改项目的.NET Framework目标)。
由于目标框架需要“System.Core”,因此删除它会阻止构建
(据我所知,查克的回答)
,他们决定强制引用它,即使你实际上没有在引用列表中看到它。
您可能会说,有一种“安全”黑客,当您尝试再次将其添加到引用时会产生不良副作用,并且您最终需要直接编辑项目文件。
Microsoft Connect于2018年退役,但这是他们收到的答案的组合:
是的,经验不是很好。由于System.Core是必需的,因此您永远不应将其删除。我们通过为您添加它来修复此问题,即使您删除了引用。 [A]您看到的消息表明,System.Core是隐式引用的。因此,除了从项目文件中物理删除一行之外,您已删除它的事实并未以任何方式更改构建。
在合理的情况下,您可能希望能够这样做,但这是一个非常前卫的角落案例。但是,我们应该盲目地忽略这样一个事实:当你添加它时会产生错误。以前的版本对我们施加了很多这样的问题,这些版本不了解多目标,并且根本没有得到清理。
[Y]您可以通过右键单击项目节点并选择卸载来手动将其添加回来。再次右键单击项目节点,然后选择“编辑”。在编辑器中,复制另一个参考行(例如,“System”的参考行)并将其粘贴到同一ItemGroup内的原始参考下面。将引用名称更改为“System.Core”。右键单击项目节点,然后选择“重新加载”。选择“是”以保存并重新加载问题。
VS2008没有正确处理多目标。它可以让你构建不合法的东西。使用VS2010,我们已经非常努力地确保如果它为目标框架构建,那么它将在目标框架上运行。我不能说我知道任何不合适的地方。
我们不能回到VS2008的方式,因为它不了解多目标。它也不理解真正的“配置文件”,如.NET 4.0框架的客户端配置文件。事实上,您所看到的问题是因为VS2008系统已升级为处理多目标,而且它是拒绝引用的新规则集。
在这种情况下,即使您删除了引用,我们也会构建。你可能会说,但它不应该建立。但是,它将在目标框架上运行,因此应该已经构建。事实上,我们为您添加了“必需的”参考,这在某种程度上是一种破碎的经验。
我们实际上并没有及早发现这一点,并且非常了解我们如何在发布之前修复它以获得修复。但是,您应该始终引用并因此永远不会删除“System.Core”的事实使得这不会修复,因为这不是99%的客户会做的事情。