2010-01-19 7 views
5

Ich spielte mit VS2010 Beta2 herum. Ich habe festgestellt, dass wenn ich versuche, System.Core.dll zu einem Projekt hinzuzufügen, das noch keinen Verweis darauf hat, in VS2010, beschwert sich, dass ich diese Assembly nicht hinzufügen kann, da es bereits vom Projektsystem referenziert wird. Irgendeine Idee warum sie das in VS2010/4.0 machen? Liegt es daran, dass sie wenige Typen von System.Core an mscorlib weitergeleitet haben?System.Core.dll in 4.0 standardmäßig hinzugefügt?

+0

Vielen Dank für diese Frage Wir haben versucht, .Net4 mit vs2010, aber unsere Lösung hatte zu viel Gepäck, das würde nicht funktionieren, so dass wir zurück zu 3,5 bewegt. Nach dem Fehler, den Sie ausgelöst haben, habe ich die Problemumgehung gefunden, sodass ich den Verweis auf System.Core wieder in ein Projekt einfügen konnte, das ohne diesen Fehler nicht erstellt werden konnte. –

+0

Dieses Problem wurde in VS2012 bei der Portierung des SL4-Projekts auf SL5 behoben. –

Antwort

3

System.Core ist seit 3.5 Teil des erforderlichen Frameworks, da es Dinge wie ExtensionAttribute und die LINQ-Standardabfrageoperatoren enthält. Wenn Sie in VS2008 ein 3.5-Projekt erstellen, fügt es automatisch einen Verweis auf System.Core für Sie hinzu.

+0

Ich weiß, dass es standardmäßig auch in 3.5 einen Verweis auf System.Core hinzufügt. Aber der Unterschied hier ist, wenn Sie diese Referenz von System.Core aus dem Projekt entfernen, dann versuchen Sie es wieder hinzuzufügen, wird es Krippe sagen, dass die Baugruppe bereits an das Projekt ist. Dies geschieht nicht in 3.5. – Niranjan

+0

Das klingt wie ein Fehler: entweder sollte es Sie diese erforderliche Referenz nicht entfernen lassen, oder es sollte Sie es hinzufügen lassen, wenn Sie die Referenz entfernen. Vielleicht lohnt es sich, über Connect zu berichten. – itowlson

+3

Fehler behoben: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=525663 – Niranjan

5

Keine Antwort für "warum sie das tun", aber könnte hilfreich sein. Diese

ist, wie ich die Kette von Aktionen sehen, die impliziten führen zu System.Core.dll Referenzierung:

  • Sie machen ein Projekt in Visual Studio 2010. Es erzeugt CSPROJ mit ToolsVersion=4.0. Angenommen, es wird MSBuild von .NET 4 verwendet.
  • Ihre .csproj importiert Microsoft.CSharp.targets von $(MSBuildBinPath). Ich denke, es c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets sein
  • Microsoft.CSharp.targets Importe Microsoft.Common.targets
  • In .NET 4, Microsoft.Common.targets Importe Microsoft.NETFramework.props
  • In Microsoft.NETFramework.props Sie AdditionalExplicitAssemblyReferences Knoten finden, die ein Semikolon -separierte Liste von Baugruppen Ich fand dort System.Core.dll und eine Variable für den späteren Ersatz.

Also, um deaktivieren implizite Referenz von System.Core.dll, können Sie es aus der Liste in AdditionalExplicitAssemblyReferences Knoten in c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.props zu entfernen.

Danach, wenn Sie verwenden, zum Beispiel System.Linq und haben keinen Bezug auf System.Core.dll in Ihrem Projekt werden Sie logisch Fehler erhalten kompilieren, genau wie in Visual Studio 2008.

Verwandte Themen