Targeting von .NET Framework 4.5 über Visual Studio 2010

169

Heute habe ich .NET Framework 4.5 auf meinem Computer installiert und erwartet, dass es von Visual Studio 2010 aus verwendet werden kann, da es sich nur um ein kleines Update handelt, das für Visual Studio 2010 keine Probleme bereiten sollte. Leider entferne ich bestimmte 4.0 nicht einmal manuell Das Hinzufügen der entsprechenden 4.5-Assemblys führte dazu, dass die ursprünglichen 4.0-Assemblys im Projekt weiterhin referenziert werden.

Ist es möglich, Version 4.5 von Visual Studio 2010 aus als Ziel festzulegen, und wenn ja, wie? Ich würde wirklich gerne die Bänder verwenden ...

Golvellius
quelle
Sie müssen ein Upgrade auf Visual Studio 2012 für .NET v4.5-Unterstützung durchführen.
Arran
Diese Einschränkung wurde mir bekannt, als ich versuchte, die System.Threading.Tasks.Task.Run () -Methode in einer VS 2010-Konsolenanwendung zu verwenden. Diese Methode wird in der Task-Klasse nicht angezeigt, wenn Ihr Projekt auf .NET Framework 4.0 abzielt, und Sie stellen dann fest, dass VS2010 nicht auf .NET Framework 4.5 abzielen kann, wenn Sie dies möchten.
RBT

Antworten:

194

Jede Version von Visual Studio vor Visual Studio 2010 ist an ein bestimmtes .NET-Framework gebunden. (VS2008 ist .NET 3.5, VS2005 ist .NET 2.0, VS2003 ist .NET1.1) Visual Studio 2010 und höher ermöglicht das Targeting früherer Framework-Versionen, kann jedoch nicht für zukünftige Versionen verwendet werden. Sie müssen Visual Studio 2012 verwenden, um .NET 4.5 verwenden zu können.

Brad S.
quelle
9
Nicht ganz richtig - .NET 3.0 wurde zwischen VS-Versionen veröffentlicht und konnte in VS2005 verwendet werden.
Sly Gryphon
9
Was für ein Rätsel: Migrieren Sie zu vs2012 +, um eine Feinheit von .net 4.5 zu nutzen, und verlieren Sie dabei das beliebte vs2010-Setup-Projekt für die Bereitstellung von MSI-Installationsprogrammen ... "Upgrade" fühlt sich eher wie ein Sidegrade an ...
ecoe
6
@ecoe - Es gibt eine VS 2013-Erweiterung, die den Setup & Deployment-Projekttyp zurückbringt
ajawad987
2
Das ist falsch. Sie müssen kein Upgrade durchführen, um diese Funktion nutzen zu können. Sie müssen lediglich eine neue Referenz hinzufügen und dann zum Ordner .NET 4.5 navigieren: C: \ Programme (x86) \ Referenzassemblies \ Microsoft \ Framework \\. Net Framework \ 4.5. Dort finden Sie die Referenz. Fügen Sie es einfach hinzu und es funktioniert
Hermes Trismegistus
2
@HermesTrismegistus in VS 2010 Ich klicke auf "Ziel-Framework = Andere Frameworks installieren" und gehe zu einer Website microsoft.com/net/download/visual-studio-sdks. Ich kann nicht zu einem Ordner navigieren. Was soll ich machen. Ich muss in der Lage sein, 4.5 von VS 2010 zu zielen. Tks.
Echeban
67

Es gibt ziemlich begrenzte Szenarien, in denen ich mir vorstellen kann, wo dies nützlich wäre, aber nehmen wir an, Sie können kein Geld für den Kauf von VS2012 oder etwas in diesem Sinne erhalten. Wenn dies der Fall ist und Sie Windows 7+ und VS 2010 haben, können Sie möglicherweise den folgenden von mir zusammengestellten Hack verwenden, der zu funktionieren scheint (aber ich habe eine Anwendung mit dieser Methode noch nicht vollständig bereitgestellt).

  1. Sichern Sie Ihre Projektdatei !!!

  2. Laden Sie das Windows 8 SDK herunter und installieren Sie es, das das .NET 4.5 SDK enthält.

  3. Öffnen Sie Ihr Projekt in VS2010.

  4. Erstellen Sie in Ihrem Projekt eine Textdatei Compile_4_5_CSharp.targetsmit dem folgenden Inhalt. (Oder es einfach herunterladen hier - Stellen Sie sicher , dass die „.txt“ Erweiterung aus dem Dateinamen entfernen):

    <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. Entladen Sie Ihr Projekt (Rechtsklick -> Entladen).

  6. Bearbeiten Sie die Projektdatei (Rechtsklick -> Bearbeiten * .csproj).

  7. Nehmen Sie die folgenden Änderungen in der Projektdatei vor:

    ein. Ersetzen Sie die Standardeinstellung Microsoft.CSharp.targetsdurch die in Schritt 4 erstellte Zieldatei

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

    b. Ändern Sie die Standardplattform 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. Fügen Sie eine AnyCPUPlattform hinzu, um das Targeting anderer Frameworks zu ermöglichen, wie in den Projekteigenschaften angegeben. Dies sollte kurz vor dem ersten <ItemGroup>Tag in der Datei hinzugefügt werden

    <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
        <PlatformTarget>AnyCPU</PlatformTarget>
    </PropertyGroup>
    
    .
    .
    .
    <ItemGroup>
    .
    .
    .
    
  8. Speichern Sie Ihre Änderungen und schließen Sie die *.csprojDatei.

  9. Laden Sie Ihr Projekt neu (Rechtsklick -> Projekt neu laden).

  10. Stellen Sie im Konfigurationsmanager (Build -> Configuration Manager) sicher, dass die Plattform ".NET 4.5" für Ihr Projekt ausgewählt ist.

  11. Erstellen Sie im Konfigurationsmanager noch eine neue Lösungsplattform für ".NET 4.5" (Sie können sie auf "Beliebige CPU" basieren) und stellen Sie sicher, dass ".NET 4.5" für die Lösung ausgewählt ist.

  12. Erstellen Sie Ihr Projekt und suchen Sie nach Fehlern.

  13. Angenommen, der Build ist abgeschlossen, können Sie überprüfen, ob Sie tatsächlich auf 4.5 abzielen, indem Sie Ihrem Quellcode einen Verweis auf eine 4.5-spezifische Klasse hinzufügen:

    using System;
    using System.Text;
    
    namespace testing
    {
        using net45check = System.Reflection.ReflectionContext;
    }
    
  14. Wenn Sie mit der Plattform ".NET 4.5" kompilieren, sollte der Build erfolgreich sein. Wenn Sie unter der Plattform "Beliebige CPU" kompilieren, sollte ein Compilerfehler angezeigt werden:

    Error 6: The type or namespace name 'ReflectionContext' does not exist in
    the namespace 'System.Reflection' (are you missing an assembly reference?)
    
David Woodward
quelle
3
Das ist verrückt, selbst wenn es funktionieren würde. Würden UI-Elemente wie Ribbon Designer ohne eine Menge XAML und andere Fehler funktionieren? srsly nur upgraden.
Anonymer Typ
1
Zusätzlich zu David Woodwards Antwort fügte ich <OutputPath>bin\</OutputPath>Folgendes hinzu: Zur ersten PropertyGroup, als der folgende Fehler auftrat: Die OutputPath-Eigenschaft ist nicht für das Projekt 'Projektname' festgelegt.
mparkuk
Das funktioniert tatsächlich. Aber ich benutze es nur, damit ich Moles nach der Installation von .NET Framework 4.5.1 auf VS2010 weiter ausführen kann.
Conrad Clark
1
Ich konnte nicht herausfinden, wie Schritt 11 "... eine neue Lösungsplattform erstellen ..." erfolgreich ausgeführt werden kann, stellte jedoch fest, dass die Anweisungen insgesamt erfolgreich waren, wenn Schritt 11 ignoriert wird.
Tony Pulokas
8

Zu Ihrer Information, wenn Sie ein Installationspaket in VS2010 erstellen möchten, zielt es leider nur auf .NET 4 ab. Um dies zu umgehen, müssen Sie NET 4.5 als Startbedingung hinzufügen.

Fügen Sie den Startbedingungen des Installationsprogramms Folgendes hinzu (Rechtsklick, Ansicht, Startbedingungen).

Klicken Sie unter "Zielmaschine suchen" mit der rechten Maustaste und wählen Sie "Registrierungssuche hinzufügen".

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

Neue "Startbedingung" hinzufügen:

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.

Wo:

378389 = .NET Framework 4.5

378675 = .NET Framework 4.5.1 wurde unter Windows 8.1 installiert

378758 = .NET Framework 4.5.1 unter Windows 8, Windows 7 SP1 oder Windows Vista SP2 installiert

379893 = .NET Framework 4.5.2

Referenz der Startbedingung: http://msdn.microsoft.com/en-us/library/vstudio/xxyh2e6a(v=vs.100).aspx

Cyberenergie
quelle
3

Ich habe Probleme mit der Integration von VS2010 / DNFW 4.5 und habe dies endlich zum Laufen gebracht. Ab VS 2008 wurde ein von Visual Studio verwendeter Cache mit Assemblys eingeführt, der als "referenzierte Assemblys" bezeichnet wird. Dieser Dateicache für VS 2010 befindet sich unter \ Reference Assemblies \ Microsoft \ Framework.NetFramework \ v4.0. Visual Studio lädt Framework-Assemblys von diesem Speicherort anstatt aus dem Framework-Installationsverzeichnis. Wenn Microsoft angibt, dass VS 2010 DNFW 4.5 nicht unterstützt, bedeutet dies, dass dieses Verzeichnis bei der Installation von DNFW 4.5 nicht aktualisiert wird. Sobald Sie die Dateien an diesem Speicherort durch die aktualisierten DNFW 4.5-Dateien ersetzt haben, werden Sie feststellen, dass VS 2010 problemlos mit DNFW 4.5 funktioniert.

Capt Nasty
quelle
0

Von einer anderen Suche. Hat für mich gearbeitet!

"Sie können Visual Studio 2010 verwenden und es unterstützt es, sofern Ihr Betriebssystem .NET 4.5 unterstützt.

Klicken Sie mit der rechten Maustaste auf Ihre Lösung, um eine Referenz hinzuzufügen (wie Sie es tun). Wenn das Dialogfeld angezeigt wird, wählen Sie Durchsuchen und navigieren Sie zum folgenden Ordner:

C: \ Programme (x86) \ Referenzassemblies \ Microsoft \ Framework \ .Net Framework \ 4.5

Sie werden es dort finden. "

Hermes Trismegistus
quelle
6
Was ist im Satz "Sie werden es dort finden" "es"? Welche Datei in diesem Ordner wählen wir aus? Wird einer von ihnen uns in VS 2010 auf .net 4.5 abzielen lassen?
Jeff Roe
Sie finden die Namespace-Assemblys. Sie können hinzufügen, was Sie möchten. Zum Beispiel musste ich eine Methode zum Arbeiten mit ZIP-Dateien verwenden. Also habe ich die DLL "System.IO.Compression.dll" gefunden und meinem Projekt hinzugefügt. Dann könnte ich den Namespace explizit in meinem Code auflisten und die benötigten Methoden verwenden.
Hermes Trismegistus
1
Das funktioniert bei mir nicht. Wenn Sie Ihren Verweis auf beispielsweise System entfernen und dann zur .Net 4.5-System.dll navigieren und diese als Referenz hinzufügen, wählt VS weiterhin die 4.0 System.dll aus. Die Antwort von Capt Nasty auf dieser Seite funktioniert für mich, z. B. Kopieren System.dll aus C: \ Programme (x86) \ Referenzassemblies \ Microsoft \ Framework \ .NETFramework \ v4.6 und legen Sie es über System.dll in C: \ Programme (x86) \ Referenzassemblies \ Microsoft \ ab Framework \ .NETFramework \ v4.0. Beachten Sie jedoch, dass dies ein böser Hack ist und unbeabsichtigte Konsequenzen haben kann.
Jinlye