2010-01-19 76 views
5

我在玩VS2010 beta2。我注意到,如果我嘗試將System.Core.dll添加到尚未引用該項目的項目中,則在VS2010中,它會抱怨說我無法添加該項目組件,因爲它已被項目系統引用。任何想法爲什麼他們在VS2010/4.0中做到這一點?是否因爲他們從System.Core轉發了少量類型到mscorlib?默認添加4.0中的System.Core.dll?

+0

感謝這個問題,我們用VS2010試用了.Net4,但是我們的解決方案有太多的行李不能用,所以我們回到了3.5。在您提出的錯誤之後,我找到了解決方法,以便我可以將對System.Core的引用添加回到沒有它的情況下無法構建的項目。 – 2010-07-23 09:49:16

+0

在將SL4項目移植到SL5時遇到了VS2012中的相同問題。 – 2012-08-21 09:03:32

回答

3

自3.5以來,System.Core一直是所需框架的一部分,因爲它包含了諸如ExtensionAttribute和LINQ標準查詢操作符之類的東西。同樣,如果您在VS2008中創建3.5項目,它會自動爲您添加對System.Core的引用。

+0

我知道它在3.5中默認添加了對System.Core的引用。但是,這裏的區別在於,如果您從項目中刪除了System.Core的引用,然後嘗試將其添加回來,它會反對說該程序集已經存在於項目中。這在3.5中不會發生。 – Niranjan 2010-01-19 06:22:58

+0

這聽起來像一個錯誤:或者它不應該讓你刪除這個需要的引用,或者它應該讓你添加它,如果你刪除了引用。可能值得關於Connect的報道。 – itowlson 2010-01-19 06:35:23

+3

引發的問題:https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=525663 – Niranjan 2010-01-19 08:46:26

5

不是「他們爲什麼這樣做」的答案,但可能會有所幫助。

這是我怎麼看,導致隱含引用System.Core.dll行動的鏈條:

  • 你讓一個項目在Visual Studio 2010中它生成的.csproj與 ToolsVersion=4.0。假設它將使用.NET 4中的MSBuild。
  • 您的.csproj從$(MSBuildBinPath)導入Microsoft.CSharp.targets。我想這將是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的禁用隱式引用,您可以從列表中AdditionalExplicitAssemblyReferences節點c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.props將其刪除。

在此之後,如果你使用,例如,System.Linq和項目中有沒有提到System.Core.dll,你會得到邏輯錯誤編譯,就像在Visual Studio 2008中