Orientación de .NET Framework 4.5 a través de Visual Studio 2010

169

Hoy instalé .NET Framework 4.5 en mi máquina esperando poder usarlo desde Visual Studio 2010, ya que es solo una actualización menor que no debería plantear problemas para Visual Studio 2010. Desafortunadamente no lo estoy, incluso eliminando manualmente ciertos 4.0 y la adición de los 4.5 ensamblajes correspondientes dio como resultado que los ensamblajes 4.0 originales aún se hicieran referencia en el proyecto.

¿Es posible apuntar a la versión 4.5 de Visual Studio 2010 y, en caso afirmativo, cómo? Realmente me gustaría usar las cintas ...

Golvellius
fuente
Debe actualizar a Visual Studio 2012 para la compatibilidad con .NET v4.5.
Arran
Conocí esta limitación cuando intentaba usar el método System.Threading.Tasks.Task.Run () en una aplicación de consola VS 2010. Este método no aparece en la clase de Tarea si su proyecto está dirigido a .Net framework 4.0 y luego se da cuenta de que VS2010 no puede apuntar a .Net framework 4.5 si lo desea.
RBT

Respuestas:

194

Cada versión de Visual Studio anterior a Visual Studio 2010 está vinculada a un marco .NET específico. (VS2008 es .NET 3.5, VS2005 es .NET 2.0, VS2003 es .NET1.1) Visual Studio 2010 y posteriores permiten la orientación de versiones anteriores de framework, pero no se pueden usar para futuras versiones. Debe usar Visual Studio 2012 para utilizar .NET 4.5.

Brad S
fuente
9
No del todo cierto: .NET 3.0 se lanzó entre las versiones de VS y se pudo usar en VS2005.
Sly Gryphon
9
Qué enigma: migrar a vs2012 + para utilizar una bondad de .net 4.5 a costa de perder el amado Proyecto de configuración vs2010 para implementar instaladores msi ... "actualizar" se siente más como un cambio lateral ...
ecoe
66
@ecoe - Hay un VS 2013 extensión que trae de nuevo el tipo de proyecto de instalación e implementación: visualstudiogallery.msdn.microsoft.com/...
ajawad987
2
Esto es incorrecto. No tiene que actualizar para usar esta función. Todo lo que necesita hacer es agregar una nueva referencia, luego busque la carpeta .NET 4.5: C: \ Archivos de programa (x86) \ Assemblies de referencia \ Microsoft \ Framework \\. Net Framework \ 4.5. Encontrará la referencia allí. Solo agrégalo y funciona
Hermes Trismegistus
2
@HermesTrismegistus en VS 2010 Hago clic en "Marco de destino = Instalar otros marcos" y me lleva a un sitio web microsoft.com/net/download/visual-studio-sdks No me permite navegar a ninguna carpeta. Qué tengo que hacer. Debo poder apuntar a 4.5 desde VS 2010. Tks.
Echeban
67

Hay escenarios bastante limitados en los que puedo pensar dónde sería útil, pero supongamos que no puede obtener fondos para comprar VS2012 o algo por el estilo. Si ese es el caso y tiene Windows 7+ y VS 2010, puede usar el siguiente truco que he creado y que parece funcionar (pero todavía no he implementado completamente una aplicación con este método).

  1. Copia de seguridad de su archivo de proyecto !!!

  2. Descargue e instale el SDK de Windows 8 que incluye el SDK de .NET 4.5.

  3. Abra su proyecto en VS2010.

  4. Cree un archivo de texto en su proyecto nombrado Compile_4_5_CSharp.targetscon los siguientes contenidos. (O simplemente descárguelo aquí : asegúrese de eliminar la extensión ".txt" del nombre del archivo):

    <Project DefaultTargets="Build"
     xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
    
        <!-- Change the target framework to 4.5 if using the ".NET 4.5" configuration -->
        <PropertyGroup Condition=" '$(Platform)' == '.NET 4.5' ">
            <DefineConstants Condition="'$(DefineConstants)'==''">
                TARGETTING_FX_4_5
            </DefineConstants>
            <DefineConstants Condition="'$(DefineConstants)'!='' and '$(DefineConstants)'!='TARGETTING_FX_4_5'">
                $(DefineConstants);TARGETTING_FX_4_5
            </DefineConstants>
            <PlatformTarget Condition="'$(PlatformTarget)'!=''"/>
            <TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
        </PropertyGroup>
    
        <!-- Import the standard C# targets -->
        <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />
    
        <!-- Add .NET 4.5 as an available platform -->
        <PropertyGroup>
           <AvailablePlatforms>$(AvailablePlatforms),.NET 4.5</AvailablePlatforms>
        </PropertyGroup>
    </Project>
    
  5. Descargue su proyecto (clic derecho -> descargar).

  6. Edite el archivo del proyecto (clic derecho -> Editar * .csproj).

  7. Realice los siguientes cambios en el archivo del proyecto:

    a. Reemplace el valor predeterminado Microsoft.CSharp.targetscon el archivo de destino creado en el paso 4

    <!-- Old Import Entry -->
    <!-- <Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" /> -->
    
    <!-- New Import Entry -->
    <Import Project="Compile_4_5_CSharp.targets" />
    

    si. Cambiar la plataforma predeterminada a.NET 4.5

    <!-- Old default platform entry -->
    <!-- <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform> -->
    
    <!-- New default platform entry -->
    <Platform Condition=" '$(Platform)' == '' ">.NET 4.5</Platform>
    

    C. Agregue AnyCPUplataforma para permitir la orientación a otros marcos como se especifica en las propiedades del proyecto. Esto debe agregarse justo antes de la primera <ItemGroup>etiqueta en el archivo

    <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
        <PlatformTarget>AnyCPU</PlatformTarget>
    </PropertyGroup>
    
    .
    .
    .
    <ItemGroup>
    .
    .
    .
    
  8. Guarde sus cambios y cierre el *.csprojarchivo.

  9. Recargue su proyecto (clic derecho -> Recargar proyecto).

  10. En el administrador de configuración (Build -> Configuration Manager) asegúrese de que la plataforma ".NET 4.5" esté seleccionada para su proyecto.

  11. Aún en el administrador de configuración, cree una nueva plataforma de solución para ".NET 4.5" (puede basarla en "Cualquier CPU") y asegúrese de que ".NET 4.5" esté seleccionado para la solución.

  12. Cree su proyecto y verifique si hay errores.

  13. Suponiendo que la compilación se complete, puede verificar que realmente está apuntando a 4.5 agregando una referencia a una clase específica 4.5 a su código fuente:

    using System;
    using System.Text;
    
    namespace testing
    {
        using net45check = System.Reflection.ReflectionContext;
    }
    
  14. Cuando compila utilizando la plataforma ".NET 4.5", la compilación debe tener éxito. Cuando compila bajo la plataforma "Cualquier CPU", debería recibir un error de compilación:

    Error 6: The type or namespace name 'ReflectionContext' does not exist in
    the namespace 'System.Reflection' (are you missing an assembly reference?)
    
David Woodward
fuente
3
Esto es una locura, incluso si funcionara, ¿funcionarían los elementos de la interfaz de usuario como el diseñador de cintas sin masas de xaml y otros errores? srsly solo actualiza.
Tipo anónimo el
1
Además de la respuesta de David Woodward, agregué: <OutputPath>bin\</OutputPath>al primer PropertyGroup, cuando ocurrió el siguiente error: La propiedad OutputPath no está establecida para el proyecto 'nombre del proyecto'.
mparkuk
Esto de hecho funciona. Pero solo lo estoy usando para poder seguir ejecutando Moles en VS2010 después de instalar .NET Framework 4.5.1.
Conrad Clark
1
No pude descubrir cómo hacer con éxito el paso 11, "... crear una nueva plataforma de solución ...", pero descubrí que las instrucciones fueron exitosas en general si se ignora el paso 11.
Tony Pulokas
8

Para su información, si desea crear un paquete de instalador en VS2010, desafortunadamente solo se dirige a .NET 4. Para solucionar esto, debe agregar NET 4.5 como condición de inicio.

Agregue lo siguiente a las Condiciones de inicio del instalador (clic derecho, Ver, Condiciones de inicio).

En "Buscar máquina de destino", haga clic derecho y seleccione "Agregar búsqueda de registro".

Property: REGISTRYVALUE1
RegKey: Software\Microsoft\NET Framework Setup\NDP\v4\Full
Root: vsdrrHKLM
Value: Release

Agregar nueva "Condición de lanzamiento":

Condition: REGISTRYVALUE1>="#378389"
InstallUrl: http://www.microsoft.com/en-gb/download/details.aspx?id=30653
Message: Setup requires .NET Framework 4.5 to be installed.

Dónde:

378389 = .NET Framework 4.5

378675 = .NET Framework 4.5.1 instalado con Windows 8.1

378758 = .NET Framework 4.5.1 instalado en Windows 8, Windows 7 SP1 o Windows Vista SP2

379893 = .NET Framework 4.5.2

Referencia de condición de lanzamiento: http://msdn.microsoft.com/en-us/library/vstudio/xxyh2e6a(v=vs.100).aspx

ciberenergía
fuente
3

He estado luchando con la integración VS2010 / DNFW 4.5 y finalmente he conseguido que esto funcione. A partir de VS 2008, se introdujo un caché de ensamblajes que Visual Studio utiliza como "ensamblados referenciados". Este caché de archivos para VS 2010 se encuentra en \ Reference Assemblies \ Microsoft \ Framework.NetFramework \ v4.0. Visual Studio carga ensamblajes de marco desde esta ubicación en lugar de hacerlo desde el directorio de instalación del marco. Cuando Microsoft dice que VS 2010 no es compatible con DNFW 4.5, lo que quieren decir es que este directorio no se actualiza cuando se instala DNFW 4.5. Una vez que haya reemplazado los archivos en esta ubicación con los archivos actualizados de DNFW 4.5, encontrará que VS 2010 funcionará felizmente con DNFW 4.5.

Capt Nasty
fuente
0

De otra búsqueda. ¡Trabajó para mi!

"Puede usar Visual Studio 2010 y lo admite, siempre que su sistema operativo sea compatible con .NET 4.5.

Haga clic derecho en su solución para agregar una referencia (como lo hace). Cuando aparezca el cuadro de diálogo, seleccione examinar, luego navegue a la siguiente carpeta:

C: \ Archivos de programa (x86) \ Ensamblados de referencia \ Microsoft \ Framework \ .Net Framework \ 4.5

Lo encontrarás allí ".

Hermes Trismegisto
fuente
66
En la oración "Lo encontrarás allí", ¿qué es "eso"? ¿Qué archivo en esa carpeta seleccionamos? ¿Uno de ellos nos permitirá apuntar a .net 4.5 en VS 2010?
Jeff Roe el
Encontrará los conjuntos de espacios de nombres. Puede agregar el que desee. Por ejemplo, necesitaba usar un método para trabajar con archivos ZIP. Entonces encontré el dll "System.IO.Compression.dll" y lo agregué a mi proyecto. Entonces podría enumerar explícitamente el espacio de nombres en mi código y usar los métodos que necesitaba.
Hermes Trismegisto el
1
Esto no funciona para mi. Si elimina su referencia a, por ejemplo, Sistema, y ​​luego navega a .Net 4.5 System.dll y agrega eso como referencia, VS sigue eligiendo la respuesta de 4.0 System.dll Capt Nasty en esta página que me funciona, por ejemplo, copiar System.dll de C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.6 y colóquelo encima de System.dll en C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0. Sin embargo, tenga en cuenta que este es un truco desagradable y puede tener consecuencias no deseadas.
Jinlye