visual una studio soluciones solucion que proyectos proyecto ideas hechos explorador ejemplos definicion como abrir c# visual-studio visual-studio-2012 solution

c# - soluciones - que es una solucion en visual studio



Retargeting todos los proyectos en una soluciĆ³n a.NET 4.5.2 (5)

Dado que Target Framework Migrator no funciona, hice mi propia búsqueda / reemplazo (usando git bash, funciona bien en Windows); Básicamente, cambia el v4.6.x a v4.7.2 , luego convierte los archivos a usar el infame CRLF de DOS:

<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>

Tengo una solución en Visual Studio 2012 con 170 proyectos de C #. Necesito reorientar todos los proyectos desde .NET Framework 4.0 a 4.5.2.

Prefiero dejar que Visual Studio se encargue de esto yendo a las propiedades de cada proyecto, cambiando el marco de destino y dejando que Visual Studio realice los cambios necesarios en los archivos .csproj.

Noté que estos cambios incluyen agregar algunas nuevas etiquetas XML al .csproj, dependiendo de algunos atributos del proyecto actual.

¿Cómo puedo reagrupar por lotes todos los proyectos de 170 C # sin simplemente usar una herramienta de reemplazo de texto para reemplazar el número de versión objetivo? Quiero que Visual Studio realice todas las modificaciones y adiciones de etiquetas necesarias y reemplace solo, no permitirá que eso suceda.


He creado una herramienta simple para migrar las versiones de framework de destino para una solución completa, porque Target Framework Migrator Extension no es compatible con Visual Studio 2017. Descargue la herramienta desde mi repositorio de GitHub https://github.com/Xpitfire/TargetFrameworkMigrator

Sé que esta no es la mejor manera de hacerlo, pero funcionó para mí y tal vez también ayude a alguien más.


La documentación de MSDN " Guía de migración de .NET Framework 4.5 " y " Cómo configurar una aplicación para admitir .NET Framework 4 o 4.5 " solo trata la modificación de proyectos. No hay detalles sobre la aplicación de cambios a la solución completa a la vez, ni he visto una función en VS que lo admita.

Sin embargo, hay una extensión (bien calificada) llamada Target Framework Migrator disponible en la galería de Visual Studio, que admite la actualización a 4.5.2 (así como las versiones más nuevas **) y parece que hará exactamente lo que desea. El código fuente está disponible en GitHub , si está interesado.

Tenga en cuenta que la falta de dicha función puede ser intencional (y no solo una omisión). Solo estoy adivinando, pero tal vez MS cree que solo los proyectos que necesitan los nuevos Frameworks se actualizarán. FWIW, si termina actualizando algunos proyectos que se comparten con otras soluciones, es posible que esas soluciones no se creen hasta que también se actualicen.

Dicho esto, si está en una tienda pequeña con solo una (o algunas) soluciones y está buscando actualizar todo de una vez, entonces tal vez la herramienta anterior funcione para usted.

No ha habido desarrollo en esto durante años , y aparentemente el desarrollador no tiene planes de pasar el testigo a nadie más.

Si no puede hacer que funcione con una versión más reciente de .NET Framework, revise los PRs existentes y los Issues para solucionarlos, pero es posible que deba aplicarlos usted mismo. Por ejemplo, alguien publicó una solución para .NET Framework v 4.7.1 . Espero que estos se fusionen, pero no aguanto la respiración.

Si alguien más está viendo el mismo error que Anas (en los comentarios), aquí hay un problema de GitHub de hace un par de semanas, y otro problema posiblemente relacionado de 2017. Considere subir los pulgares y agregar más detalles si tiene el mismo problema .


Para una solución de .NET Framework, un simple " Reemplazar en archivos " hizo el truco para mí:

por ejemplo : de .NET Framework 4.5.2 a .NET Framework 4.7.2

En los archivos package.config , reemplace todos

find . /( -iname ''*.csproj'' -o -iname ''*.vcxproj'' -o -iname ''app.config'' /) / -exec grep -Z -l ''v4/.6/..'' /{} /; | xargs -0 sed -i ''s/v4/.6/../v4.7.2/'' find . /( -iname ''*.csproj'' -o -iname ''*.vcxproj'' -o -iname ''app.config'' /) / -exec grep -Z -l ''v4/.7/..'' /{} /; | xargs -0 unix2dos

a

targetFramework="net452"

En los archivos * .csproj , reemplace todos

targetFramework="net472"

a

<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion>


public void ChangeFramework() { //Add Reference to envdte (Assemblies/Extensions/envDTE) string SolutionFile = @"C:/MyProject/MyProject.sln"; string ProjectName = "MyProject"; //------------------------------------------------------------------------ //Find the Program ID from the registry for VisualStudio.DTE //Look it up In Registry: Computer/HKEY_LOCAL_MACHINE/SOFTWARE/Classes System.Type oType = System.Type.GetTypeFromProgID("VisualStudio.DTE", true); EnvDTE.DTE dte = (EnvDTE.DTE)Activator.CreateInstance(oType, true); //------------------------------------------------------------------------ //Open your Solution dte.Solution.Open(SolutionFile); //------------------------------------------------------------------------ //Now In your solution go through what is listed in dte.Solution.Projects //and find the one that match what you want to change target for int iItemsCount = dte.Solution.Projects.Count; string sCurrent = ""; for (int i = 1; i <= iItemsCount; i++) { sCurrent = dte.Solution.Projects.Item(i).Name; if (dte.Solution.Projects.Item(i).Name == ProjectName) { //Once you find your project, Change the Framework EnvDTE.Project oProject = dte.Solution.Projects.Item(i); oProject.Properties.Item("TargetFrameworkMoniker").Value = ".NETFramework,Version = v4.6.2"; } } //------------------------------------------------------------------------ //Close your Solution dte.Solution.Close(); }