2012-09-12 32 views
156

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 estoy, incluso eliminando manualmente ciertos 4.0 y agregando los ensamblados 4.5 resultantes en los ensamblados 4.0 originales que aún se referencian en el proyecto.Targeting .NET Framework 4.5 a través de Visual Studio 2010

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

+0

Debe actualizar a Visual Studio 2012 para compatibilidad con .NET v4.5. – Arran

+0

Vine a conocer esta limitación cuando estaba tratando de 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 Tarea si su proyecto tiene como objetivo .NET Framework 4.0 y luego se da cuenta de que VS2010 no puede orientar .NET Framework 4.5 si lo desea. – RBT

Respuesta

187

Cada versión de Visual Studio anterior a Visual Studio 2010 está vinculada a un .NET framework 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 del marco, pero no se puede usar para futuras versiones. Debe usar Visual Studio 2012 para utilizar .NET 4.5.

+8

No del todo cierto: .NET 3.0 se lanzó entre las versiones VS, y podría utilizarse en VS2005. –

+1

Es cierto, pero solo por medio de una extensión. No estaba integrado en VS 2005 desde el principio (y, como tal, no está totalmente optimizado). – thefellow3j

+5

¡Qué enigma: migrar a vs2012 + para utilizar una exquisitez de .NET 4.5 a costa de perder el adorado Proyecto de instalación vs2010 para implementar instaladores msi ... "actualizar" se siente más como un cambio lateral ... – ecoe

63

Existen situaciones muy limitadas que se me ocurren en las que esto sería útil, pero supongamos que no se pueden obtener fondos para comprar VS2012 o algo por el estilo. Si ese es el caso y tienes Windows 7+ y VS 2010, puedes usar el siguiente truco que armé y que parece funcionar (pero todavía no he implementado por completo una aplicación que use este método).

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

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

  3. Abra su proyecto en VS2010.

  4. Cree un archivo de texto en su proyecto denominado Compile_4_5_CSharp.targets con los siguientes contenidos. (O simplemente descargarlo here - Asegúrese de quitar la extensión ".txt" en el 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. descargar su proyecto (clic derecho -> descarga).

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

  7. realizar los siguientes cambios en el archivo de proyecto:

    a. Sustituir el nombre predeterminado Microsoft.CSharp.targets con 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" /> 
    

    b. Cambiar la plataforma por defecto 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 la plataforma AnyCPU para permitir la orientación de otros marcos como se especifica en las propiedades del proyecto. Esto se debe añadir justo antes de la primera <ItemGroup> etiqueta en el archivo

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

  9. Recargue su proyecto (haga 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 seleccionar ".NET 4.5" para la solución.

  12. Genere su proyecto y compruebe si hay errores.

  13. Suponiendo que la generación se completó puede verificar que usted es de hecho dirigen a 4,5 mediante la adición de una referencia a una clase específica de 4,5 a su código fuente:

    using System; 
    using System.Text; 
    
    namespace testing 
    { 
        using net45check = System.Reflection.ReflectionContext; 
    } 
    
  14. Cuando se compila utilizando el" .NET 4.5" plataforma la construcción debería tener éxito. Cuando se compila bajo la plataforma "Cualquier CPU" que debería obtener un error del compilador:

    Error 6: The type or namespace name 'ReflectionContext' does not exist in 
    the namespace 'System.Reflection' (are you missing an assembly reference?) 
    
+3

esto es loco, incluso si funcionó, ¿los elementos de la interfaz de usuario como el diseñador de cintas funcionarían sin masas de xaml y otros errores? srsly acaba de actualizar. –

+0

Esto de hecho funciona. Pero solo lo estoy usando para poder seguir usando Moles en VS2010 después de instalar .NET Framework 4.5.1. –

+1

Además de la respuesta de David Woodward, agregué: ' bin \' al primer PropertyGroup, cuando se produjo el siguiente error: La propiedad OutputPath no está establecida para el proyecto 'project name'. – mparkuk

7

FYI, si desea crear un paquete de instalación en VS2010, por desgracia, sólo se refiere a .NET 4. Para el trabajo alrededor de esto, debe agregar NET 4.5 como condición de inicio.

Agregue lo siguiente en las condiciones de inicio del instalador (haga clic con el botón derecho, vea, inicie condiciones).

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

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

Añadir nueva "condición de inicio":

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 Window s Vista SP2

379893 = .NET Framework 4.5.2

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

3

he estado luchando con VS2010/DNFW 4,5 integración y finalmente tengo este trabajo. A partir de VS 2008, se introdujo un caché de ensamblados que Visual Studio utiliza como "Conjuntos referenciados". Este caché de archivos para VS 2010 se encuentra en \ Assemblies \ Microsoft \ Framework.NetFramework \ v4.0 de referencia. Visual Studio carga ensamblajes de marco desde esta ubicación en lugar de desde el directorio de instalación de marco. Cuando Microsoft dice que VS 2010 no es compatible con DNFW 4.5, lo que significa 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.

1

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 el cuadro de diálogo de confirmación, seleccione Examinar, a continuación, vaya a la siguiente carpeta:

C: \ Archivos de programa (x86) \ Referencia Asambleas \ Microsoft \ Framework \ Net Framework \ 4,5

Va a encontrar allí. "

+2

En la oración "Lo encontrarás allí", ¿qué es "eso"? ¿Qué archivo en esa carpeta seleccionamos? ¿Alguno de ellos nos permitirá alcanzar .net 4.5 en VS 2010? –

+0

Encontrará los ensamblados de espacios de nombres. Puedes agregar el que quieras. Por ejemplo, necesitaba usar un método para trabajar con archivos ZIP. Así que encontré el dll "System.IO.Compression.dll" y lo agregué a mi proyecto. Luego podría enumerar explícitamente el espacio de nombres en mi código y usar los métodos que necesitaba. –

+0

Esto no funciona para mí. Si elimina su referencia a, por ejemplo, System, y luego navega hacia .Net 4.5 System.dll y agrega eso como referencia, VS aún sigue seleccionando la respuesta de 4.0 System.dll Capt Nasty en esta página, que funciona para mí, p. Copie System.dll desde C: \ Archivos de programa (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.6 y suéltelo encima de System.dll en C: \ Archivos de programa (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0. Sin embargo, tenga en cuenta que este es un hack desagradable y puede tener consecuencias no deseadas. – Jinlye

Cuestiones relacionadas