System.Core.dll в 4.0 добавлена ​​по умолчанию? - PullRequest
6 голосов
/ 19 января 2010

Я играл с VS2010 beta2.Я заметил, что если я пытаюсь добавить System.Core.dll в проект, который еще не имеет ссылки на это, в VS2010 он жалуется, говоря, что я не могу добавить эту сборку, так как на нее уже ссылается система проекта.Любая идея, почему они делают это в VS2010 / 4.0?Это потому, что они отправили несколько типов mscorlib из System.Core?

Ответы [ 2 ]

5 голосов
/ 22 августа 2012

Не ответ на вопрос «зачем они это делают», но может быть полезным.

Вот так я вижу цепочку действий, которые приводят к неявным ссылкам System.Core.dll:

  • Вы создаете проект в Visual Studio 2010. Он генерирует .csproj с ToolsVersion=4.0. Предположим, он будет использовать MSBuild из .NET 4.
  • Ваш .csproj импортирует Microsoft.CSharp.targets из $(MSBuildBinPath). Я думаю, это будет c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets
  • Microsoft.CSharp.targets import 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.

3 голосов
/ 19 января 2010

System.Core является частью необходимой инфраструктуры с 3.5, потому что она включает такие вещи, как ExtensionAttribute и LINQ Standard Query Operators. Аналогично, если вы создадите проект 3.5 в VS2008, он автоматически добавит для вас ссылку на System.Core.

...