Не ответ на вопрос «зачем они это делают», но может быть полезным.
Вот так я вижу цепочку действий, которые приводят к неявным ссылкам 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.