2010-01-19 24 views
5

Estaba jugando con VS2010 beta2. Me di cuenta de que si trato de agregar System.Core.dll a un proyecto que ya no tiene una referencia a eso, en VS2010, se queja diciendo que no puedo agregar ese ensamblado ya que el sistema del proyecto lo menciona. ¿Alguna idea de por qué están haciendo eso en VS2010/4.0? ¿Es porque han reenviado algunos tipos a mscorlib desde System.Core?System.Core.dll en 4.0 agregado por defecto?

+0

Gracias por esta pregunta , probamos .Net4 con vs2010, pero nuestra solución tenía demasiado equipaje que no funcionaría, así que volvimos a 3.5. Siguiendo el error que planteaste, encontré la solución para poder agregar la referencia a System.Core en un proyecto que no se compilaría sin él. –

+0

Se enfrentó al mismo problema en VS2012 al transferir el proyecto SL4 a SL5. –

Respuesta

3

System.Core ha sido parte del marco requerido desde 3.5, porque incluye cosas como ExtensionAttribute y los Operadores de consultas estándar LINQ. De forma similar, si crea un proyecto 3.5 en VS2008, automáticamente agregará una referencia a System.Core por usted.

+0

Sé que agrega referencia a System.Core por defecto incluso en 3.5. Pero la diferencia aquí es que si eliminas esa referencia de System.Core del proyecto, y luego tratas de volver a agregarla, aparecerá en la cuna diciendo que el ensamblado ya está en el proyecto. Esto no ocurre en 3.5. – Niranjan

+0

Eso suena como un error: o bien no debería permitirle eliminar esta referencia requerida, o debería permitirle volver a agregarla si elimina la referencia. Puede valer la pena informar sobre Connect. – itowlson

+3

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

5

No es una respuesta para "por qué lo están haciendo", pero podría ser útil.

Esta es la forma en que veo la cadena de acciones que conducen a la referencia implícita System.Core.dll:

  • Haces un proyecto en Visual Studio 2010. Genera .csproj con ToolsVersion=4.0. Suponga que utilizará MSBuild desde .NET 4.
  • Su .csproj importa Microsoft.CSharp.targets desde $(MSBuildBinPath). Supongo que será c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.CSharp.targets
  • Microsoft.CSharp.targets importaciones Microsoft.Common.targets
  • En .NET 4, Microsoft.Common.targets importaciones Microsoft.NETFramework.props
  • En Microsoft.NETFramework.props se pueden encontrar AdditionalExplicitAssemblyReferences nodo, que tiene un punto y coma -lista separada de asambleas. Encontré allí System.Core.dll y una variable para su posterior reemplazo.

lo tanto, para desactivar referencia implícita de System.Core.dll, puede eliminarlo de la lista de AdditionalExplicitAssemblyReferences nodo en c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Microsoft.NETFramework.props.

Después de esto, si se utiliza, por ejemplo, System.Linq y no tienen ninguna referencia a System.Core.dll en su proyecto, tendrá lógicamente obtener error de compilación, al igual que en Visual Studio 2008.