即使项目构建,Visual Studio Intellisense也无法识别动态关键字。我试图添加对System.Core
的引用来解决问题。我收到此错误:
无法添加对“System.Core”的引用。构建系统已自动引用此组件。
我注意到我的其他项目都引用了System.Core
。我的修复是通过直接编辑csproj来添加它,这修复了Intellisense。是什么赋予了?为什么VS不允许我通过用户界面进行操作?
在做了一些研究后,我所能找到的只是之前的SO门票和一些博客,最终他们最终都使用了相同的工作方式。然后我发现了一个bug report,有人在2011年提交了Microsoft Connect,最终在一年后左右被MSFT员工Chuck England回答。
TL; DR - 由于multi-targeting功能添加到VS2008(能够更改项目的.NET Framework目标),团队做出了有意识的决定。
由于目标框架需要“System.Core”,并且删除它会阻止构建(据我理解Chuck的答案),他们决定强制引用它,即使你实际上没有在它的列表中看到它引用。
您可能会说,有一种“安全”黑客,当您尝试再次将其添加到引用时会产生不良副作用,并且您最终需要直接编辑项目文件。
Microsoft Connect于2018年退役,但这是他们收到的答案的组合:
是的,经验不是很好。由于System.Core是必需的,因此您永远不应将其删除。我们通过为您添加它来修复此问题,即使您删除了引用。 [A]您看到的消息表明,System.Core是隐式引用的。因此,除了从项目文件中物理删除一行之外,您已删除它的事实并未以任何方式更改构建。
在合理的情况下,您可能希望能够这样做,但这是一个非常前卫的角落案例。但是,我们应该盲目地忽略这样一个事实:当你添加它时会产生错误。以前的版本对我们施加了很多这样的问题,这些版本不了解多目标,并且根本没有得到清理。
[Y]您可以通过右键单击项目节点并选择卸载来手动将其添加回来。再次右键单击项目节点,然后选择“编辑”。在编辑器中,复制另一个参考行(例如,“System”的参考行)并将其粘贴到同一ItemGroup内的原始参考下面。将引用名称更改为“System.Core”。右键单击项目节点,然后选择“重新加载”。选择“是”以保存并重新加载问题。
VS2008没有正确处理多目标。它可以让你构建不合法的东西。使用VS2010,我们已经非常努力地确保如果它为目标框架构建,那么它将在目标框架上运行。我不能说我知道任何不合适的地方。
我们不能回到VS2008的方式,因为它不了解多目标。它也不理解真正的“配置文件”,如.NET 4.0框架的客户端配置文件。事实上,您所看到的问题是因为VS2008系统已升级为处理多目标,而且它是拒绝引用的新规则集。
在这种情况下,即使您删除了引用,我们也会构建。你可能会说,但它不应该建立。但是,它将在目标框架上运行,因此应该已经构建。事实上,我们为您添加了“必需的”参考,这在某种程度上是一种破碎的经验。
我们实际上并没有及早发现这一点,并且非常了解我们如何在发布之前修复它以获得修复。但是,您应该始终引用并因此永远不会删除“System.Core”的事实使得这不会修复,因为这不是99%的客户会做的事情。
在@Arthur的回答基础上,我发现有两件事情可以解决它:
添加到.csproj
文件,缺少的行:
<Reference Include="System.Core" />
然后,根据forums.asp.net的回答,在main web.config
中添加System.Core程序集引用(不是Views下的那个):
<system.web>
<compilation debug="true" targetFramework="4.7.1">
<assemblies>
<add assembly="System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<add assembly="System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Web.Mvc, Version=5.2.3.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</assemblies>
</compilation>
<httpRuntime targetFramework="4.7.1" />
<!-- ... ... -->
</system.web>
然后:
1)确保web.config中编译属性的.NET框架版本与项目属性中指定的版本相同。
2)确保视图文件夹web.config中的MVC程序集版本与您在项目中使用的MVC程序集相同。
3)重新启动Visual Studio(2017年)。
希望这可以帮助。
通过手动将这些行添加到.csproj文件中恢复:
<Reference Include="System" />
<Reference Include="System.Core" />
你好,我知道这个帖子已经老了,但对于那些仍在寻找解决方案的人来说,希望这可以帮助你。因为我也面临同样的问题,因为我不小心删除了System.Core dll。 我做的是我从C:\ Program Files(x86)\ Reference Assemblies \ Microsoft \ Framework.NETFramework \ v4.6.1 \ System.Core.dll复制了这个DLL,我将这些lib粘贴到我的项目bin中。 稍后您可以看到项目中的dll会自动添加到参考中。在那之后,我重启我的vs,它的工作原理! Goodluck希望它可以解决你的问题