Ciblage de .NET Framework 4.5 via Visual Studio 2010

169

Aujourd'hui, j'ai installé le .NET Framework 4.5 sur ma machine en espérant pouvoir l'utiliser à partir de Visual Studio 2010, car il ne s'agit que d'une mise à jour mineure qui ne devrait pas poser de problèmes pour Visual Studio 2010. Malheureusement, je ne le suis pas, même en supprimant manuellement certains 4.0 et l'ajout des assemblys 4.5 correspondants a permis aux assemblys 4.0 d'origine d'être référencés dans le projet.

Est-il possible de cibler la version 4.5 à partir de Visual Studio 2010 et si oui, comment? J'aimerais vraiment utiliser les rubans ...

Golvellius
la source
Vous devez mettre à niveau vers Visual Studio 2012 pour la prise en charge de .NET v4.5.
Arran
J'ai pris connaissance de cette limitation lorsque j'essayais d'utiliser la méthode System.Threading.Tasks.Task.Run () dans une application console VS 2010. Cette méthode n'apparaît pas sur la classe Task si votre projet cible .Net Framework 4.0 et que vous vous rendez compte que VS2010 ne peut pas cibler .Net Framework 4.5 si vous le souhaitez.
RBT

Réponses:

194

Chaque version de Visual Studio antérieure à Visual Studio 2010 est liée à un framework .NET spécifique. (VS2008 est .NET 3.5, VS2005 est .NET 2.0, VS2003 est .NET1.1) Visual Studio 2010 et les versions ultérieures permettent de cibler les versions antérieures du framework mais ne peuvent pas être utilisés pour les versions futures. Vous devez utiliser Visual Studio 2012 pour utiliser .NET 4.5.

Brad S
la source
9
Pas tout à fait vrai - .NET 3.0 a été publié entre les versions VS et pourrait être utilisé dans VS2005.
Sly Gryphon
9
Quelle énigme: migrer vers vs2012 + pour utiliser une subtilité de .net 4.5 au prix de perdre le bien-aimé projet d'installation vs2010 pour le déploiement des installateurs msi ... "upgrade" ressemble plus à un sidegrade ...
ecoe
6
@ecoe - Il existe une extension VS 2013 qui ramène le type de projet d'installation et de déploiement: visualstudiogallery.msdn.microsoft.com
...
2
Ceci est une erreur. Vous n'avez pas besoin de mettre à niveau pour utiliser cette fonctionnalité. Tout ce que vous avez à faire est d'ajouter une nouvelle référence, puis accédez au dossier .NET 4.5: C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \\. Net Framework \ 4.5. Vous y trouverez la référence. Il suffit de l'ajouter et cela fonctionne
Hermes Trismegistus
2
@HermesTrismegistus dans VS 2010 Je clique sur "Target Framework = Install Other Frameworks" et cela m'amène à un site Web microsoft.com/net/download/visual-studio-sdks Il ne me laisse naviguer vers aucun dossier. Que devrais-je faire. je dois être capable de cibler 4,5 à partir de VS 2010. Tks.
Echeban
67

Il y a des scénarios assez limités auxquels je peux penser où cela serait utile, mais supposons que vous ne pouvez pas obtenir de fonds pour acheter VS2012 ou quelque chose à cet effet. Si tel est le cas et que vous avez Windows 7+ et VS 2010, vous pourrez peut-être utiliser le hack suivant que j'ai mis en place et qui semble fonctionner (mais je n'ai pas encore complètement déployé une application en utilisant cette méthode).

  1. Sauvegardez votre fichier de projet !!!

  2. Téléchargez et installez le SDK Windows 8 qui inclut le SDK .NET 4.5.

  3. Ouvrez votre projet dans VS2010.

  4. Créez un fichier texte dans votre projet nommé Compile_4_5_CSharp.targetsavec le contenu suivant. (Ou téléchargez-le simplement ici - Assurez-vous de supprimer l'extension ".txt" du nom de fichier):

    <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. Déchargez votre projet (clic droit -> déchargez).

  6. Editez le fichier projet (clic droit -> Editer * .csproj).

  7. Apportez les modifications suivantes au fichier de projet:

    une. Remplacer la valeur par défautMicrosoft.CSharp.targets par par le fichier cible créé à l'étape 4

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

    b. Remplacez la plate-forme par défaut par.NET 4.5

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

    c. Ajoutez une AnyCPUplate-forme pour permettre le ciblage d'autres frameworks comme spécifié dans les propriétés du projet. Cela doit être ajouté juste avant la première <ItemGroup>balise du fichier

    <PropertyGroup Condition="'$(Platform)' == 'AnyCPU'">
        <PlatformTarget>AnyCPU</PlatformTarget>
    </PropertyGroup>
    
    .
    .
    .
    <ItemGroup>
    .
    .
    .
    
  8. Enregistrez vos modifications et fermez le *.csproj fichier.

  9. Rechargez votre projet (clic droit -> Recharger le projet).

  10. Dans le gestionnaire de configuration (Build -> Configuration Manager) assurez-vous que la plateforme ".NET 4.5" est sélectionnée pour votre projet.

  11. Toujours dans le gestionnaire de configuration, créez une nouvelle plate-forme de solution pour «.NET 4.5» (vous pouvez la baser sur «N'importe quel processeur») et assurez-vous que «.NET 4.5» est sélectionné pour la solution.

  12. Construisez votre projet et recherchez les erreurs.

  13. En supposant que la construction soit terminée, vous pouvez vérifier que vous ciblez bien 4.5 en ajoutant une référence à une classe spécifique 4.5 à votre code source:

    using System;
    using System.Text;
    
    namespace testing
    {
        using net45check = System.Reflection.ReflectionContext;
    }
    
  14. Lorsque vous compilez à l'aide de la plate-forme «.NET 4.5», la génération doit réussir. Lorsque vous compilez sous la plate-forme "Any CPU", vous devriez obtenir une erreur de compilation:

    Error 6: The type or namespace name 'ReflectionContext' does not exist in
    the namespace 'System.Reflection' (are you missing an assembly reference?)
    
David Woodward
la source
3
c'est krazy, même si cela fonctionnait, les éléments de l'interface utilisateur tels que le concepteur de ruban fonctionneraient-ils sans des masses de xaml et d'autres erreurs? srsly juste mettre à jour.
Type anonyme
1
En plus de la réponse de David Woodward, j'ai ajouté: <OutputPath>bin\</OutputPath>au premier PropertyGroup, lorsque l'erreur ci-dessous s'est produite: La propriété OutputPath n'est pas définie pour le projet «nom du projet».
mparkuk
Cela fonctionne en effet. Mais je l'utilise juste pour pouvoir continuer à exécuter Moles sur VS2010 après avoir installé .NET Framework 4.5.1.
Conrad Clark
1
Je n'ai pas pu comprendre comment réussir l'étape 11, "... créer une nouvelle plate-forme de solution ...", mais j'ai trouvé que les instructions étaient globalement réussies si l'étape 11 était ignorée.
Tony Pulokas
8

Pour info, si vous souhaitez créer un package d'installation dans VS2010, il ne cible malheureusement que .NET 4. Pour contourner ce problème, vous devez ajouter NET 4.5 comme condition de lancement.

Ajoutez ce qui suit dans les conditions de lancement de l'installateur (clic droit, vue, conditions de lancement).

Dans "Search Target Machine", cliquez avec le bouton droit de la souris et sélectionnez "Add Registry Search".

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

Ajouter une nouvelle «condition de lancement»:

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.

Où:

378389 = .NET Framework 4.5

378675 = .NET Framework 4.5.1 installé avec Windows 8.1

378758 = .NET Framework 4.5.1 installé sur Windows 8, Windows 7 SP1 ou Windows Vista SP2

379893 = .NET Framework 4.5.2

Référence des conditions de lancement: http://msdn.microsoft.com/en-us/library/vstudio/xxyh2e6a(v=vs.100).aspx

cyberénergie
la source
3

J'ai eu du mal avec l'intégration VS2010 / DNFW 4.5 et j'ai finalement obtenu que cela fonctionne. À partir de VS 2008, un cache d'assemblys a été introduit qui est utilisé par Visual Studio appelé les «assemblys référencés». Ce cache de fichiers pour VS 2010 se trouve dans \ Reference Assemblies \ Microsoft \ Framework.NetFramework \ v4.0. Visual Studio charge les assemblys d'infrastructure à partir de cet emplacement au lieu du répertoire d'installation de l'infrastructure. Lorsque Microsoft dit que VS 2010 ne prend pas en charge DNFW 4.5, cela signifie que ce répertoire n'est pas mis à jour lorsque DNFW 4.5 est installé. Une fois que vous avez remplacé les fichiers à cet emplacement par les fichiers DNFW 4.5 mis à jour, vous constaterez que VS 2010 fonctionnera avec plaisir avec DNFW 4.5.

Capt méchant
la source
0

À partir d'une autre recherche. A travaillé pour moi!

«Vous pouvez utiliser Visual Studio 2010 et il le prend en charge, à condition que votre système d'exploitation prenne en charge .NET 4.5.

Faites un clic droit sur votre solution pour ajouter une référence (comme vous le faites). Lorsque la boîte de dialogue s'affiche, sélectionnez Parcourir, puis accédez au dossier suivant:

C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ .Net Framework \ 4.5

Vous le trouverez là-bas. "

Hermès Trismégiste
la source
6
Dans la phrase "Vous le trouverez là-bas", qu'est-ce que "ça"? Quel fichier dans ce dossier sélectionnons-nous? L'un d'eux nous permettra-t-il de cibler .net 4.5 dans VS 2010?
Jeff Roe
Vous trouverez les assemblys d'espace de noms. Vous pouvez ajouter celui que vous voulez. Par exemple, j'avais besoin d'utiliser une méthode pour travailler avec des fichiers ZIP. J'ai donc trouvé la dll "System.IO.Compression.dll" et l'ai ajoutée à mon projet. Ensuite, je pourrais explicitement lister l'espace de noms dans mon code et utiliser les méthodes dont j'avais besoin.
Hermes Trismegistus
1
Cela ne fonctionne pas pour moi. Si vous supprimez votre référence à, par exemple, System, puis accédez au .Net 4.5 System.dll et ajoutez cela comme référence, VS choisit toujours la réponse 4.0 System.dll Capt Nasty sur cette page fonctionne pour moi, par exemple copie System.dll à partir de C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.6 et déposez-le par-dessus System.dll dans C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ Framework \ .NETFramework \ v4.0. Notez cependant que c'est un mauvais hack et peut avoir des conséquences involontaires.
Jinlye