y a-t-il de toute façon pour ouvrir et travailler sur .NET Framework 4.5
Projet dans Visual Studio 2022
.
peut être que le problème n'est pas avec VS2022, mais comme .NET Framework 4.5
Le pack de développeurs n'est plus disponible .. mon projet ne peut pas être modifié la version cible .. y a-t-il une solution de contournement? P >
6 Réponses :
build \ .netframework \ v4.5 \
à C: \ Program Files (x86) \ Reference Assemblies \ Microsoft \ framework \ .netframework \ v4.5 < / code>
Pour plus de détails: Construire un projet qui cible .NET Framework 4.5 dans Visual Studio 2022
omg
C'était aussi simple que cela !! J'ai passé le lien mais j'ai raté le point de téléchargement du package .. Merci pour la simplification étape par étape ... ça marche maintenant
J'ai automatisé les étapes de cette réponse: stackoverflow.com/a/70398706/569302
Cela fonctionne également lorsque vous ciblez .NET 4.0, téléchargez simplement le package NUGET .NET40 et copiez des fichiers dans le dossier \ .netframework \ v4.0. Redémarrez vs ouvrez ensuite le projet et cela fonctionne très bien.
Remarque : Après avoir téléchargé, vous devez renommer le nom de fichier de .nupkg
à .zip
que le reste du processus est comme mentionné dans ce réponse. Peut-être qu'il est connu du maximum d'entre vous, mais cela pourrait économiser des heures pour quelqu'un comme moi. C'est pourquoi mettre le commentaire ici.
Cela ne fonctionne pas pour .net 3.5
N'oubliez pas de fermer et de rouvrir Visual Studio après cela, car le changement ne prend pas automatiquement effet.
Cela fonctionne également pour .NET Framework 4.5.1 et pour toute autre version. Obtenez simplement le package NuGet pour la version de .NET Framework dont vous avez besoin, et dézip et copiez les fichiers dans le dossier correspondant sur votre PC
Même si vous avez déjà un dossier V4.5, déplacez ces fichiers vers un nouveau dossier _BK et collez les fichiers dans le dossier V4.5. Fonctionne parfaitement. Merci!
Bien que ce soit la réponse acceptée , c'est honnêtement la manière dure . La seule chose et que vous devez faire est de référencer le package NuGet approprié. Vous faites pas avez besoin de télécharger explicitement, de l'extraire ou d'écrire un code pour qu'il fonctionne. Il fonctionnera avec tout projet qui prend en charge NuGet ou packages.config
. Le problème avec cette approche est qu'il nécessite une élévation pour écrire dans un répertoire protégé, peut ne pas fonctionner sur un serveur de construction et n'est pas adapté à l'équipe. Le package a des cibles MSBuild qui magiquement relie tout.
@Chrismartinez vraiment? L'OP a clairement un problème pour charger le projet en premier lieu ainsi que la plupart de ceux qui viennent ici pour la réponse. Le chargement d'un package NuGet dans le projet peut donc ne pas être la bonne solution pour la situation ici.
@ CME64 Oui, vraiment. Le projet ne se charge pas car le pack de ciblage .NET nécessaire n'a pas été trouvé. Le package NuGet Assemblages de référence comprend tous les fichiers nécessaires du pack de ciblage et remplace les propriétés et cibles MSBuild pour utiliser l'emplacement du fichier NuGet au lieu d'un emplacement installé. J'ai élargi ma réponse avec des détails supplémentaires, des images, etc. ainsi qu'un lien vers un Gist de travail.
Cela a fonctionné pour moi, assez facile
Des informations qui sauvent des vies! Merci! :)
Voici une solution automatisée. Il suit les étapes de cette réponse: https://stackoverflow.com/a/70109092/569302 lorsque cela copie les fichiers, les dossiers Une boîte de dialogue peut sembler que vous devez cliquer pour remplacer les fichiers qui existent déjà
( note: vous devrez peut-être mettre à jour la "version" "1.0.2"
Il y a un plus récent package nuget )
Exécuter attendre Devhelpers.Download ();
using Microsoft.VisualBasic.FileIO; using System.IO.Compression; namespace j.Dev { /// <summary> /// Example Usage: await DevHelpers.DownloadAndCopyFramework4_0And4_5(); /// </summary> public class DevHelpers { public static async Task DownloadAndCopyFramework4_0And4_5() { await DownloadAndCopyFramework4_0(); await DownloadAndCopyFramework4_5(); } public static async Task DownloadAndCopyFramework4_5() { await DownloadAndCopyFrameworkGeneric("net45", "v4.5", "1.0.2"); } public static async Task DownloadAndCopyFramework4_0() { await DownloadAndCopyFrameworkGeneric("net40", "v4.0", "1.0.2"); } public static async Task DownloadAndCopyFrameworkGeneric(string netVersion, string folder, string nugetVersion) { var name = netVersion + "-" + DateTimeToFileString(DateTime.Now); var fileName = $"{name}.zip"; var url = $"https://www.nuget.org/api/v2/package/Microsoft.NETFramework.ReferenceAssemblies.{netVersion}/{nugetVersion}"; await DownloadFile(fileName, url); ZipFile.ExtractToDirectory(fileName, name); var from = Path.Join(name, @"build\.NETFramework\" + folder); var to = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\" + folder; FileSystem.CopyDirectory(from, to, UIOption.AllDialogs); } private static string DateTimeToFileString(DateTime d) { return d.ToString("yyyy-dd-M--HH-mm-ss"); } private static async Task DownloadFile(string fileName, string url) { var uri = new Uri(url); HttpClient client = new HttpClient(); var response = await client.GetAsync(uri); using (var fs = new FileStream( fileName, FileMode.CreateNew)) { await response.Content.CopyToAsync(fs); } } } }
Dans mon cas, je devais télécharger 4.0 et 4.5, alors voici le code qui Télécharges à la fois 4.0 et 4.5:
using Microsoft.VisualBasic.FileIO; using System; using System.Collections.Generic; using System.IO.Compression; using System.Linq; using System.Net; using System.Text; using System.Threading.Tasks; namespace j.Dev { public class DevHelpers { public static async Task Download() { var version = "1.0.2"; var name = "Framework45-" + DateTimeToFileString(DateTime.Now); var fileName = $"{name}.zip"; var url = $"https://www.nuget.org/api/v2/package/Microsoft.NETFramework.ReferenceAssemblies.net45/{version}"; await DownloadFile(fileName, url); ZipFile.ExtractToDirectory(fileName, name); var from = Path.Join(name, @"build\.NETFramework\v4.5\"); var to = @"C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.5"; FileSystem.CopyDirectory(from, to, UIOption.AllDialogs); } private static string DateTimeToFileString(DateTime d) { return d.ToString("yyyy-dd-M--HH-mm-ss"); } private static async Task DownloadFile(string fileName, string url) { var uri = new Uri(url); HttpClient client = new HttpClient(); var response = await client.GetAsync(uri); using (var fs = new FileStream( fileName, FileMode.CreateNew)) { await response.Content.CopyToAsync(fs); } } } }
Merci pour le script. Je voulais à la fois 4.0 et 4.5 car j'ai d'anciens projets pour la bibliothèque de classe et l'application WinForm. Une question: le "var version =" 1.0.2 "
ou (" netx0 "," vx.0 "," 1.0.2 ")
Dernière à partir d'aujourd'hui (même si la version framework dans l'ancienne)?
"Merci pour le script." De rien!!!
"Le" var version = "1.0.2" ou ("netx0", "vx.0", "1.0.2") compte "si je comprends correctement: j'ai fourni deux solutions de code. Peu importe si vous Utilisez le premier ( var version = "1.0.2"
) ou le second ( ("net45", "v4.5", "1.0.2")
). J'ai fourni les deux parce que le premier répond à la question sur ce site précisément et que le second peut être utile à d'autres qui recherchent sur Google.
"Est-ce plus récent à partir d'aujourd'hui (même si la version framework dans ancienne)" à ce jour, c'est le package NuGet le plus récent sur ce site: nuget.org/packages/… Si vous cliquez sur" Versions ", vous pouvez voir le dernier (Capture d'écran du site Web NuGet: ibb.co/pc43zg5 ). Une amélioration du code que j'ai écrit est de vérifier ce site Web NuGet (ou de faire quelque chose) pour voir s'il y a une nouvelle version du package NuGet
@ Deathgod7 Voir les commentaires ci-dessus
Merci encore. J'allais presque pour mettre à jour la version d'assemblage quand j'ai vu 4.0 et 4.5 avaient disparu en VS2022. Ensuite, j'ai vu votre réponse et c'est bien maintenant.
Pour .NET 4.0, cette commande l'installera pour vous si vous avez les fichiers Visual Studio 2019 mis en cache:
msiexec.exe /i "%ALLUSERSPROFILE%\Microsoft\VisualStudio\Packages\Microsoft.Net.4.5.2.TargetingPack,version=4.5.51651.1\netfx_452mtpack.msi" EXTUI=1
pour .net 4.5, cela pourrait fonctionner, bien que je ne l'ai pas fait J'ai essayé:
msiexec.exe /i "%ALLUSERSPROFILE%\Microsoft\VisualStudio\Packages\Microsoft.Net.4.TargetingPack,version=4.0.30319.1\netfx_dtp.msi" EXTUI=1
Merci beaucoup, vous m'avez sauvé, c'est le moyen idéal. Remarque Le paramètre "extui = 1" est important.
Alors que toutes les solutions proposées, et même les solutions acceptées, aucun d'entre eux n'est l'approche préférée .
La seule chose que vous devez faire est d'ajouter une référence à la Nuget package comme suit:
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net40</TargetFramework> </PropertyGroup> <ItemGroup> <PackageReference Include="Microsoft.NETFramework.ReferenceAssemblies.net40" Version="1.0.2"> <PrivateAssets>all</PrivateAssets> <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets> </PackageReference> </ItemGroup> </Project>
Figure 1: C # Projet ciblant .NET Framework 4.0 via des assemblages de référence
Vous pouvez le faire Changer directement dans le *. CSPROJ
ou via l'interface utilisateur Package Manager dans Visual Studio. Les extensions MSBuild dans le package prendront en charge le reste de la magie . Il n'y a pas de scripts à écrire, de fichiers à copier ou d'autorisations à accorder. Cela fonctionnera sans élévation, qui serait obligé d'écrire sous % ProgramFiles%
.
Setting privateSsets = "all"
fera la conception de référence du package de conception de référence du package -Time seulement. Il ne sera pas ramassé ou inclus comme dépendance transitive si votre cible construit également un package NuGet.
Em> Figure 2: Ciblage du projet .NET Framework 4.0 dans le Visual Studio 2022 Solution Explorer
roslyn Problème 56161: supprimer .NET 4.5 Exigence du pack de ciblage confirme en outre que la façon dont vous utilisez des assemblages de référence lorsqu'un pack de ciblage n'est pas installé. Cette approche est utile chaque fois que vous ne souhaitez pas installer un pack de ciblage ou il n'est pas disponible par ailleurs - par exemple sur un serveur de construction sans Visual Studio.
Figure 3: Packs de ciblage .NET plus anciens non installés ou disponibles
J'ai rencontré le même problème après la désinstallation visuelle visuelle Studio 2019. La construction a fonctionné comme prévu de Visual Studio et de la CLI après avoir ajouté cette référence de package.
DOTNET Restore
dotnet
ou msbuild
doit être une erreur et un avertissement gratuit bin
, obj
, et éventuellement .vs
pour effacer les avertissements initiaux de Visual Studio dotnet restauration
) pour effacer les avertissements initiaux de Visual Studio net48
) Question. Que se passe-t-il si l'application Web en question ne contient pas réellement de fichier CSPROJ? Sûrement, si vous ne pouvez pas ouvrir le projet pour utiliser l'interface utilisateur du gestionnaire de packages; t'es foutu?
La question d'origine indiquait C # et, par conséquent, *. CSPROJ
. Cette approche fonctionnera cependant pour tout projet msbuild que ce soit *. VBProj
ou une vanille *. Proj
. En fin de compte, vous avez juste besoin de support NuGet. Si vous utilisez un ancien système de projet ou si vous n'avez aucun fichier de projet, vous pouvez utiliser la CLI NuGet (par exemple nuget.exe
) avec packages.config
à < I> Installez le package localement. Si vous compilez le code .NET avec une application Web, MSBuild doit être impliqué quelque part parce que c'est ainsi que le compilateur est intégré. Package de connexion *. Targets
à votre application permettra le magie .
Je souhaite que cette réponse soit acceptée.
Je n'ai pas fonctionné pour moi, donc pas aussi facile que vous le dites. Donne toujours l'erreur de chargement et n'ouvrira pas le projet après avoir ajouté ces lignes au CSPROJ.
@Brentkilboy, vous n'avez pas besoin de modifier le projet à la main, sauf si vous le souhaitez. Je n'ai pas assez de contexte. Si vous avez un GIST, un repo ou un contexte supplémentaire, je suis heureux d'élaborer. C'est est la façon officielle de pour qu'elle soit effectuée. Il est également possible que votre état de construction soit sale. Il peut être la peine d'être effacé bin
et obj
, puis une reconstruction de projet.
à partir des commentaires sur l'article lié à partir de la réponse sur la copie des fichiers: "installer" Windows 8 SDK ". Et il peut simplement installer" .NET Framework 4.5 Software Development Kit ". Aucun autre bagage."
Cette option a été la plus rapide pour moi, car je peux exécuter un installateur élevé plus facilement que de passer à l'élevage pour écrire dans les dossiers des fichiers du programme.
Mise à niveau. .NET Framework 4.5 a disparu il y a des années. La première version prise en charge est de 4.5.2, mais même cela est hors de soutien dans quelques mois. La version prise en charge la plus basse sera de 4,6.2
Voir: thomaslevesque.com/2021/11/12/…
Sujet important. J'ai trouvé la réponse acceptée bien, mais j'ai toujours obtenu 4.5.1 de la capture d'écran ci-dessus. Et passera bientôt à la mise à niveau par ex. 4.8 À prendre en charge et à l'épreuve du temps.