2012-09-12 20 views
156

Oggi ho installato .NET Framework 4.5 sulla mia macchina in attesa di poterlo utilizzare da Visual Studio 2010, poiché si tratta solo di un aggiornamento minore che non dovrebbe creare problemi per Visual   Studio   2010. Sfortunatamente non lo sono, anche la rimozione manuale di determinati 4.0 e l'aggiunta dei corrispondenti 4.5 assembly ha portato agli assembly 4.0 originali ancora a cui si fa riferimento nel progetto.Targeting di .NET Framework 4.5 tramite Visual Studio 2010

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

+0

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

+0

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

risposta

187

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

+8

Non completamente vero - .NET 3.0 è stato rilasciato tra le versioni VS e potrebbe essere utilizzato in VS2005. –

+1

Vero, ma solo tramite un'estensione. Non è stato incorporato nel VS 2005 dall'inizio (e, come tale, non completamente ottimizzato). – thefellow3j

+5

Che rompicapo: migrare a vs2012 + per utilizzare una buona quantità di .net 4.5 al costo di perdere l'amato Setup Setup vs2010 per la distribuzione di programmi di installazione msi ... "upgrade" sembra più un sidegrade ... – ecoe

63

Ci sono scenari piuttosto limitati in cui posso pensare a dove ciò sarebbe utile, ma supponiamo che non si possano ottenere fondi per l'acquisto di VS2012 o qualcosa del genere. Se è così e hai Windows 7+ e VS 2010 potresti essere in grado di usare il seguente trucco che ho messo insieme che sembra funzionare (ma non ho ancora distribuito un'applicazione con questo metodo ancora).

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

  2. Scaricare e installare il Windows 8 SDK che include l'SDK .NET 4.5.

  3. Apri il tuo progetto in VS2010.

  4. Creare un file di testo nel progetto Compile_4_5_CSharp.targets con i seguenti contenuti. (O semplicemente scaricarlo here - Assicurarsi di aver tolto 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. scaricare il vostro progetto (tasto destro -> scarico).

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

  7. apportare le seguenti modifiche nel file di progetto:

    a. Sostituire il default Microsoft.CSharp.targets con il file di destinazione creato al punto 4

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

    b. Modificare la piattaforma predefinita su .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 la piattaforma AnyCPU per consentire il targeting di altri framework come specificato nelle proprietà del progetto. Questo dovrebbe essere aggiunto appena prima del primo <ItemGroup> tag nel file

    <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'"> 
        <PlatformTarget>AnyCPU</PlatformTarget> 
    </PropertyGroup> 
    
    . 
    . 
    . 
    <ItemGroup> 
    . 
    . 
    . 
    
  8. Salvare le modifiche e chiudere il file *.csproj.

  9. Ricarica il progetto (clic destro -> Ricarica progetto).

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

  11. Sempre nel Configuration Manager, creare una nuova piattaforma di soluzione per ".NET 4.5" (è possibile basarla su "Qualsiasi CPU") e assicurarsi che ".NET 4.5" sia selezionato per la soluzione.

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

  13. Supponendo che la build completato è possibile verificare che si sta effettivamente di mira 4.5 con l'aggiunta di un riferimento a una classe specifica 4.5 per il codice sorgente:

    using System; 
    using System.Text; 
    
    namespace testing 
    { 
        using net45check = System.Reflection.ReflectionContext; 
    } 
    
  14. quando si compila utilizzando il" .NET 4.5" piattaforma la build dovrebbe avere successo. Quando si compila sotto la piattaforma "Qualsiasi CPU" si dovrebbe ottenere un errore di compilazione:

    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, gli elementi dell'interfaccia utente come ribbon designer funzionano senza masse di xaml e altri errori? srsly basta aggiornare. –

+0

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

+1

In aggiunta alla risposta di David Woodward, ho aggiunto: " bin \" al primo PropertyGroup, quando si è verificato l'errore seguente: La proprietà OutputPath non è impostata per il progetto "nome progetto". – mparkuk

7

Cordiali saluti, se si desidera creare un pacchetto di installazione in VS2010, purtroppo esso si rivolge solo .NET 4. Per lavoro attorno a questo, devi aggiungere NET 4.5 come condizione di lancio.

Aggiungere quanto segue alle condizioni di avvio del programma di installazione (clic destro, vista, condizioni di avvio).

In "Cerca computer di destinazione", fare clic con il tasto destro e selezionare "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 Finestra s Vista SP2

379893 = .NET Framework 4.5.2

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

3

ho lottato con VS2010/Dnfw 4,5 integrazione e finalmente ottenuto questo lavoro. A partire da VS 2008, è stata introdotta una cache di assembly utilizzata da Visual Studio denominata "Assembly di riferimento". Questa cache di file per VS 2010 si trova in \ Reference Assemblies \ Microsoft \ Framework.NetFramework \ v4.0. Visual Studio carica gli assembly della struttura da questa posizione anziché dalla directory di installazione del framework. Quando Microsoft afferma che VS 2010 non supporta DNFW 4.5, significa che significa che è che questa directory non viene aggiornata quando DNFW 4.5 è installato. Una volta sostituiti i file in questa posizione con i file DNFW 4.5 aggiornati, scoprirai che VS 2010 funzionerà felicemente con DNFW 4.5.

1

Da un'altra ricerca. Ha funzionato per me!

"È possibile utilizzare Visual Studio 2010 e lo supporta, a condizione che il sistema operativo supporti .NET 4.5.

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

C: \ Program Files (x86) \ Riferimento Assemblies \ Microsoft \ Framework \ Net Framework \ 4,5

troverete "

+2

Nella frase "lo troverai lì", che cos'è "it"? Quale file in quella cartella selezioniamo? Uno di loro ci permetterà di raggiungere .net 4.5 in VS 2010? –

+0

Troverete 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. –

+0

Questo non funziona per me. Se rimuovi il tuo riferimento a, ad esempio, System, e poi vai a .Net 4.5 System.dll e aggiungi che come riferimento, VS continua a scegliere la risposta 4.0 di System.dll Capt Nasty su questa pagina funziona per me, ad es. copia System.dll da C: \ Programmi (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.6 e rilasciarlo sopra System.dll in C: \ Programmi (x86) \ Reference Assembly \ Microsoft \ Framework \ .NETFramework \ v4.0. Si noti però che si tratta di un brutto attacco e potrebbe avere conseguenze non intenzionali. – Jinlye

Problemi correlati