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?
risposta
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.
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
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
Bug sollevato: https://connect.microsoft.com/VisualStudio/feedback/ViewFeedback.aspx?FeedbackID=525663 – Niranjan
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.
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. –
Affrontare lo stesso problema in VS2012 durante il porting del progetto SL4 su SL5. –