我正在玩VS2010 beta2。我注意到,如果我尝试将System.Core.dll添加到一个尚未引用该项目的项目中,在VS2010中,它会抱怨说我无法添加该程序集,因为它已经被项目系统引用。知道他们为什么在VS2010 / 4.0中这样做吗?是因为他们从System.Core转发了几种类型的mscorlib?
答案 0 :(得分:5)
不是“为什么他们这样做”的答案,但可能会有帮助。
这就是我看到导致隐式引用System.Core.dll
的行动链的方式:
ToolsVersion=4.0
。假设它将使用.NET 4中的MSBuild。Microsoft.CSharp.targets
导入$(MSBuildBinPath)
。我想这将是c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets
Microsoft.Common.targets
Microsoft.NETFramework.props
AdditionalExplicitAssemblyReferences
节点,该节点具有以分号分隔的程序集列表。我发现有System.Core.dll和一个变量供以后更换。因此,要禁用System.Core.dll的隐式引用,您可以将其从AdditionalExplicitAssemblyReferences
中c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.props
节点的列表中删除。
在此之后,如果您使用System.Linq
并且在项目中没有引用System.Core.dll,那么您将在逻辑上得到编译错误,就像在Visual Studio 2008中一样。
答案 1 :(得分:3)
System.Core自3.5以来一直是必需框架的一部分,因为它包含了诸如ExtensionAttribute和LINQ标准查询运算符之类的东西。同样,如果您在VS2008中创建一个3.5项目,它将自动为您添加对System.Core的引用。