2010-01-19 3 views
5

Je jouais avec VS2010 beta2. J'ai remarqué que si j'essaie d'ajouter System.Core.dll à un projet qui n'y a pas encore de référence, dans VS2010, il se plaint disant que je ne peux pas ajouter cet assembly car il est déjà référencé par le système de projet. Une idée de pourquoi ils le font dans VS2010/4.0? Est-ce parce qu'ils ont transféré quelques types à mscorlib depuis System.Core?System.Core.dll dans 4.0 ajouté par défaut?

+0

Merci pour cette question , nous avons essayé .Net4 avec vs2010, mais notre solution avait trop de bagages qui ne fonctionneraient pas, nous sommes donc revenus à 3.5. Suite au bug que vous avez soulevé, j'ai trouvé la solution pour que je puisse ajouter la référence à System.Core dans un projet qui ne serait pas construit sans elle. –

+0

Face au même problème dans VS2012 lors du portage projet SL4 à SL5. –

Répondre

3

System.Core fait partie du framework requis depuis la version 3.5, car il inclut des éléments tels que ExtensionAttribute et les opérateurs de requête standard LINQ. De même, si vous créez un projet 3.5 dans VS2008, il ajoutera automatiquement une référence à System.Core pour vous.

+0

Je sais qu'il ajoute une référence à System.Core par défaut même en 3.5. Mais la différence ici est, si vous supprimez cette référence de System.Core du projet, puis essayez de l'ajouter, il va bercer en disant que l'assembly est déjà au projet. Cela n'arrive pas en 3.5. – Niranjan

+0

Cela ressemble à un bogue: soit il ne devrait pas vous laisser supprimer cette référence requise, ou il devrait vous permettre de le rajouter si vous supprimez la référence. Peut être utile de signaler sur Connect. – itowlson

+3

Bogue levé: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=525663 – Niranjan

5

Pas une réponse pour "pourquoi ils font cela", mais pourrait être utile.

Voilà comment je vois la chaîne d'actions qui mènent à implicite référence System.Core.dll:

  • Vous faites un projet dans Visual Studio 2010. Il génère .csproj avec ToolsVersion=4.0. Supposons qu'il utilise MSBuild à partir de .NET 4.
  • Votre .csproj importe Microsoft.CSharp.targets à partir de $(MSBuildBinPath). Je suppose que ce sera c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets
  • importations de Microsoft.CSharp.targets Microsoft.Common.targets
  • .NET 4, les importations de Microsoft.Common.targets Microsoft.NETFramework.props
  • En Microsoft.NETFramework.props vous pouvez trouver AdditionalExplicitAssemblyReferences noeud, qui a un point-virgule liste séparée des assemblées. J'ai trouvé là System.Core.dll et une variable pour le remplacement ultérieur.

Ainsi, pour désactiver référence implicite de System.Core.dll, vous pouvez le supprimer de la liste dans le noeud AdditionalExplicitAssemblyReferences dans c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.props.

Après cela, si vous utilisez, par exemple, System.Linq et ont aucune référence à System.Core.dll dans votre projet, vous logiquement obtenir erreur de compilation, comme dans Visual Studio 2008.

Questions connexes