Targeting per .NET Framework 4.5 tramite Visual Studio 2010


169

Oggi ho installato .NET Framework 4.5 sul mio computer aspettandomi di poterlo utilizzare da Visual Studio 2010, poiché è solo un aggiornamento minore che non dovrebbe creare problemi per Visual Studio 2010. Sfortunatamente non lo sono, nemmeno la rimozione manuale di 4.0 e l'aggiunta dei corrispondenti 4,5 assemblati ha comportato la referenziazione degli assiemi 4.0 originali nel progetto.

È possibile scegliere come target la versione 4.5 da Visual Studio 2010 e, se sì, come? Mi piacerebbe davvero usare i nastri ...


È necessario eseguire l'aggiornamento a Visual Studio 2012 per il supporto di .NET v4.5.
Arran,

Sono venuto a conoscenza di questa limitazione quando stavo cercando di utilizzare il metodo System.Threading.Tasks.Task.Run () in un'applicazione console VS 2010. Questo metodo non viene visualizzato nella classe Task se il progetto ha come target .Net framework 4.0 e quindi ti rendi conto che VS2010 non può targetizzare .Net framework 4.5 se lo desideri.
RBT,

Risposte:


194

Ogni versione di Visual Studio precedente a Visual Studio 2010 è legata a un framework .NET specifico. (VS2008 è .NET 3.5, VS2005 è .NET 2.0, VS2003 è .NET1.1) Visual Studio 2010 e oltre consentono il targeting di versioni di framework precedenti ma non possono essere utilizzate per versioni future. È necessario utilizzare Visual Studio 2012 per utilizzare .NET 4.5.


9
Non del tutto vero: .NET 3.0 è stato rilasciato tra le versioni VS e potrebbe essere utilizzato in VS2005.
Sly Gryphon,

9
Quello che un enigma: migrate a vs2012 + di utilizzare una finezza di .NET 4.5 a costo di perdere il Setup VS2010 amata Progetto per l'implementazione di programmi di installazione msi ... "upgrade" sembra più un Sidegrade ...
ecoe

6
@ecoe - Esiste un'estensione VS 2013 che riporta il tipo di progetto Setup & Deployment: visualstudiogallery.msdn.microsoft.com/…
ajawad987

2
Questo non è corretto Non è necessario eseguire l'aggiornamento per utilizzare questa funzione. Tutto quello che devi fare è aggiungere un nuovo riferimento, quindi passare alla cartella .NET 4.5: C: \ Programmi (x86) \ Assembly di riferimento \ Microsoft \ Framework \\. Net Framework \ 4.5. Lì troverai il riferimento. Basta aggiungerlo e funziona
Hermes Trismegistus,

2
@HermesTrismegistus in VS 2010 faccio clic su "Target Framework = Installa altri frame" e mi porta a un sito Web microsoft.com/net/download/visual-studio-sdks Non mi permette di navigare in nessuna cartella. Cosa dovrei fare. devo essere in grado di scegliere come target 4.5 da VS 2010. Tks.
Echeban

67

Ci sono scenari piuttosto limitati che posso pensare a dove questo sarebbe utile, ma supponiamo che non si possano ottenere fondi per acquistare VS2012 o qualcosa del genere. Se questo è il caso e hai Windows 7+ e VS 2010 potresti essere in grado di utilizzare il seguente hack che ho messo insieme che sembra funzionare (ma non ho ancora distribuito completamente un'applicazione usando questo metodo).

  1. Eseguire il backup del file di progetto !!!

  2. Scarica e installa l' SDK di Windows 8 che include .NET 4.5 SDK.

  3. Apri il tuo progetto in VS2010.

  4. Crea un file di testo nel tuo progetto Compile_4_5_CSharp.targetscon i seguenti contenuti. (O semplicemente scaricalo qui - Assicurati di rimuovere l'estensione ".txt" dal nome del file):

    <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. Scarica il tuo progetto (tasto destro -> scarica).

  6. Modifica il file di progetto (tasto destro -> Modifica * .csproj).

  7. Apportare le seguenti modifiche nel file di progetto:

    un. Sostituisci il valore predefinito Microsoft.CSharp.targetscon il file di destinazione creato nel passaggio 4

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

    b. Cambia la piattaforma predefinita in.NET 4.5

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

    c. Aggiungi AnyCPUpiattaforma per consentire il targeting di altri framework come specificato nelle proprietà del progetto. Questo dovrebbe essere aggiunto poco prima del primo <ItemGroup>tag nel file

    <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
        <PlatformTarget>AnyCPU</PlatformTarget>
    </PropertyGroup>
    
    .
    .
    .
    <ItemGroup>
    .
    .
    .
    
  8. Salva le modifiche e chiudi il *.csprojfile.

  9. Ricarica il tuo progetto (tasto destro -> Ricarica progetto).

  10. In Configuration Manager (Build -> Configuration Manager) assicurati che la piattaforma ".NET 4.5" sia selezionata per il tuo progetto.

  11. Sempre nel Configuration Manager, crea una nuova piattaforma di soluzione per ".NET 4.5" (puoi basarla su "Any CPU") e assicurati che ".NET 4.5" sia selezionato per la soluzione.

  12. Crea il tuo progetto e verifica la presenza di errori.

  13. Supponendo che la compilazione completata sia possibile verificare che si stia effettivamente prendendo di mira 4.5 aggiungendo un riferimento a una classe specifica 4.5 al codice sorgente:

    using System;
    using System.Text;
    
    namespace testing
    {
        using net45check = System.Reflection.ReflectionContext;
    }
    
  14. Quando si compila utilizzando la piattaforma ".NET 4.5", la compilazione dovrebbe avere esito positivo. Quando esegui la compilazione nella piattaforma "Any CPU" dovresti ricevere un errore del compilatore:

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

3
questo è krazy, anche se funzionasse, elementi dell'interfaccia utente come il designer di nastri funzionerebbero senza masse di xaml e altri errori? Srsly basta aggiornare.
Tipo anonimo

1
Oltre alla risposta di David Woodward, ho aggiunto: <OutputPath>bin\</OutputPath>al primo gruppo di proprietà, quando si è verificato l'errore seguente: La proprietà OutputPath non è impostata per il 'nome progetto' del progetto.
mparkuk,

Questo funziona davvero. Ma lo sto solo usando per continuare a eseguire Moles su VS2010 dopo aver installato .NET Framework 4.5.1.
Conrad Clark,

1
Non sono riuscito a capire come eseguire con successo il passaggio 11, "... creare una nuova piattaforma di soluzione ...", ma ho riscontrato che le istruzioni nel complesso erano state completate correttamente se il passaggio 11 è stato ignorato.
Tony Pulokas,

8

Cordiali saluti, se si desidera creare un pacchetto di installazione in VS2010, purtroppo si rivolge solo a .NET 4. Per aggirare questo problema, è necessario aggiungere NET 4.5 come condizione di avvio.

Aggiungi quanto segue alle Condizioni di avvio del programma di installazione (clic destro, Visualizza, Condizioni di avvio).

In "Cerca macchina target", fai clic con il pulsante destro del mouse e seleziona "Aggiungi ricerca registro".

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

Aggiungi nuova "Condizione di avvio":

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.

Dove:

378389 = .NET Framework 4.5

378675 = .NET Framework 4.5.1 installato con Windows 8.1

378758 = .NET Framework 4.5.1 installato su Windows 8, Windows 7 SP1 o Windows Vista SP2

379893 = .NET Framework 4.5.2

Riferimento condizione di avvio: http://msdn.microsoft.com/en-us/library/vstudio/xxyh2e6a(v=vs.100).aspx


3

Ho avuto difficoltà con l'integrazione di VS2010 / DNFW 4.5 e finalmente ho funzionato. A partire da VS 2008, è stata introdotta una cache di assembly che viene utilizzata da Visual Studio denominata "Assembly referenziati". Questa cache di file per VS 2010 si trova in \ Reference Assemblies \ Microsoft \ Framework.NetFramework \ v4.0. Visual Studio carica gli assembly del framework da questa posizione anziché dalla directory di installazione del framework. Quando Microsoft afferma che VS 2010 non supporta DNFW 4.5, ciò significa che questa directory non viene aggiornata quando DNFW 4.5 è installato. Dopo aver sostituito i file in questa posizione con i file DNFW 4.5 aggiornati, scoprirai che VS 2010 funzionerà felicemente con DNFW 4.5.


0

Da un'altra ricerca. Ha funzionato per me!

"Puoi usare Visual Studio 2010 e non lo supporta, a condizione che il tuo sistema operativo supporti .NET 4.5.

Fare clic con il tasto destro sulla soluzione per aggiungere un riferimento (come si fa). Quando viene visualizzata la finestra di dialogo, selezionare Sfoglia, quindi passare alla seguente cartella:

C: \ Programmi (x86) \ Assembly Assembly \ Microsoft \ Framework \ .Net Framework \ 4.5

Lo troverai lì. "


6
Nella frase "Lo troverai lì", che cos'è "esso"? Quale file in quella cartella selezioniamo? Uno di loro ci permetterà di scegliere come target .net 4.5 in VS 2010?
Jeff Roe,

Troverai gli assembly dello spazio dei nomi. Puoi aggiungere quello che vuoi. Ad esempio, avevo bisogno di usare un metodo per lavorare con i file ZIP. Così ho trovato la dll "System.IO.Compression.dll" e l'ho aggiunta al mio progetto. Quindi potrei elencare esplicitamente lo spazio dei nomi nel mio codice e usare i metodi di cui avevo bisogno.
Hermes Trismegistus,

1
Questo non funziona per me. Se rimuovi il tuo riferimento a, diciamo, Sistema, e poi vai al .Net 4.5 System.dll e lo aggiungi come riferimento, VS sceglie ancora la risposta 4.0 System.dll Capt Nasty in questa pagina funziona per me, ad esempio copia System.dll da C: \ Programmi (x86) \ Assembly Assembly \ Microsoft \ Framework \ .NETFramework \ v4.6 e rilasciarlo sopra System.dll in C: \ Program Files (x86) \ Reference Assembly \ Microsoft \ Framework \ .NETFramework \ v4.0. Si noti tuttavia che questo è un brutto trucco e può avere conseguenze indesiderate.
Jinlye,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.