问题
I was playing around with VS2010 beta2. I noticed that if I try to add System.Core.dll to a project which does not already have a reference to that, in VS2010, it complains saying I cannot add that assembly as it is already referenced by the project system. Any idea why they are doing that in VS2010/4.0? Is it because they have forwarded few types to mscorlib from System.Core?
回答1:
Not an answer for "why they are doing that", but could be helpful.
This is how I see the chain of actions that lead to implicit referencing System.Core.dll
:
- You make a project in Visual Studio 2010. It generates .csproj with
ToolsVersion=4.0
. Suppose it will use MSBuild from .NET 4. - Your .csproj imports
Microsoft.CSharp.targets
from$(MSBuildBinPath)
. I guess it will bec:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets
- Microsoft.CSharp.targets imports
Microsoft.Common.targets
- In .NET 4, Microsoft.Common.targets imports
Microsoft.NETFramework.props
- In Microsoft.NETFramework.props you can find
AdditionalExplicitAssemblyReferences
node, which has a semicolon-separated list of assemblies. I found there System.Core.dll and a variable for later replacement.
So, to disable implicit reference of System.Core.dll, you can remove it from the list in AdditionalExplicitAssemblyReferences
node in c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.props
.
After this, if you use, for example, System.Linq
and have no reference to System.Core.dll in your project, you will logically get compile error, just like in Visual Studio 2008.
回答2:
System.Core has been part of the required framework since 3.5, because it includes things like ExtensionAttribute and the LINQ Standard Query Operators. Similarly, if you create a 3.5 project in VS2008, it will automatically add a reference to System.Core for you.
来源:https://stackoverflow.com/questions/2091319/system-core-dll-in-4-0-added-by-default