2010-01-19 4 views
5

Stavo giocando con VS2010 beta2. Ho notato che se provo ad aggiungere System.Core.dll a un progetto che non ha ancora un riferimento a questo, in VS2010, si lamenta dicendo che non posso aggiungere quell'assieme poiché è già referenziato dal sistema del progetto. Qualche idea sul perché lo stanno facendo in VS2010/4.0? È perché hanno inoltrato pochi tipi a mscorlib da System.Core?System.Core.dll in 4.0 aggiunto per impostazione predefinita?

+0

Grazie per questa domanda , abbiamo provato .Net4 con vs2010, ma la nostra soluzione aveva troppi bagagli che non funzionavano, quindi siamo tornati a 3.5. Seguendo il bug che hai sollevato, ho trovato la soluzione alternativa in modo che potessi aggiungere il riferimento a System.Core in un progetto che non sarebbe stato creato senza di esso. –

+0

Affrontare lo stesso problema in VS2012 durante il porting del progetto SL4 su SL5. –

risposta

3

System.Core fa parte del framework richiesto dal 3.5, poiché include cose come ExtensionAttribute e gli operatori di query standard LINQ. Allo stesso modo, se si crea un progetto 3.5 in VS2008, automaticamente verrà aggiunto un riferimento a System.Core.

+0

So che aggiunge riferimento a System.Core di default anche in 3.5. Ma la differenza qui è che se rimuovete quel riferimento di System.Core dal progetto, quindi provate ad aggiungerlo di nuovo, esso catterà dicendo che l'assembly è già nel progetto. Questo non succede in 3.5. – Niranjan

+0

Sembra un bug: o non dovrebbe permettere di rimuovere questo riferimento richiesto, o dovrebbe consentirvi di aggiungerlo nuovamente se rimuovete il riferimento. Potrebbe valere la pena di segnalare su Connect. – itowlson

+3

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

5

Non è una risposta per "perché lo stanno facendo", ma potrebbe essere utile.

Ecco come vedo la catena di azioni che portano alla implicito riferimento System.Core.dll:

  • Fate un progetto in Visual Studio 2010. Esso genera Csproj con ToolsVersion=4.0. Supponiamo che utilizzi MSBuild da .NET 4.
  • Il tuo .csproj importa Microsoft.CSharp.targets da $(MSBuildBinPath). Credo che sarà c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets
  • Microsoft.CSharp.targets importazioni Microsoft.Common.targets
  • In .NET 4, Microsoft.Common.targets importazioni Microsoft.NETFramework.props
  • In Microsoft.NETFramework.props si possono trovare AdditionalExplicitAssemblyReferences nodo, che ha un punto e virgola Elenco separato di assiemi. Ho trovato lì System.Core.dll e una variabile per la successiva sostituzione.

Quindi, per disabilitare riferimento implicito di System.Core.dll, è possibile rimuoverlo dalla lista nella AdditionalExplicitAssemblyReferences nodo c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.props.

Dopo di ciò, se si utilizza, ad esempio, System.Linq e non hanno alcun riferimento a System.Core.dll nel progetto, si logicamente ottenere errore di compilazione, proprio come in Visual Studio 2008.