4.0中的System.Core.dll默认添加?

时间:2010-01-19 05:33:00

标签: .net visual-studio-2010-beta-2

我正在玩VS2010 beta2。我注意到,如果我尝试将System.Core.dll添加到一个尚未引用该项目的项目中,在VS2010中,它会抱怨说我无法添加该程序集,因为它已经被项目系统引用。知道他们为什么在VS2010 / 4.0中这样做吗?是因为他们从System.Core转发了几种类型的mscorlib?

2 个答案:

答案 0 :(得分:5)

不是“为什么他们这样做”的答案,但可能会有帮助。

这就是我看到导致隐式引用System.Core.dll的行动链的方式:

  • 您在Visual Studio 2010中创建一个项目。它生成.csproj ToolsVersion=4.0。假设它将使用.NET 4中的MSBuild。
  • 您的.csproj从Microsoft.CSharp.targets导入$(MSBuildBinPath)。我想这将是c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets
  • Microsoft.CSharp.targets导入Microsoft.Common.targets
  • 在.NET 4中,Microsoft.Common.targets导入Microsoft.NETFramework.props
  • 在Microsoft.NETFramework.props中,您可以找到AdditionalExplicitAssemblyReferences节点,该节点具有以分号分隔的程序集列表。我发现有System.Core.dll和一个变量供以后更换。

因此,要禁用System.Core.dll的隐式引用,您可以将其从AdditionalExplicitAssemblyReferencesc:\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的引用。