Sha*_*tin 41 c# visual-studio visual-studio-2013
即使项目构建,Visual Studio Intellisense也无法识别动态关键字.我试图添加一个引用System.Core
来解决问题.我收到此错误:
无法添加对"System.Core"的引用.构建系统已自动引用此组件.
我注意到我的其他项目参考了System.Core
.我的修复是通过直接编辑csproj来添加它,这修复了Intellisense.是什么赋予了?为什么VS不允许我通过用户界面进行操作?
Gra*_*ICA 40
在做了一些研究后,我所能找到的只是以前的SO门票和一些博客,最终他们最终都使用了相同的工作方式.然后我发现了一个有人在2011年在Microsoft Connect上提交的错误报告,最终在一年后左右被MSFT员工Chuck England回答.
TL; DR - 由于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%的客户会做的事情.
woo*_*hoo 14
在@Arthur的回答基础上,我发现有两件事情可以解决它:
添加到.csproj
文件,缺少的行:
<Reference Include="System.Core" />
Run Code Online (Sandbox Code Playgroud)
然后,根据forums.asp.net的回答,在main中添加System.Core程序集引用web.config
(不是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>
Run Code Online (Sandbox Code Playgroud)
然后:
1)确保web.config中编译属性的.NET框架版本与项目属性中指定的版本相同.
2)确保视图文件夹web.config中的MVC程序集版本与您在项目中使用的MVC程序集相同.
3)重新启动Visual Studio(2017年).
希望这可以帮助.
通过手动将以下行添加到.csproj文件中进行恢复:
<Reference Include="System" />
<Reference Include="System.Core" />
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
26748 次 |
最近记录: |