Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Change the Target Framework for all my projects in a Visual Studio Solution

I need to change the target framework for all projects. I have many solutions with hundreds of projects.

Anything new here or do I have to change every single project?

like image 395
Ezombort Avatar asked Jun 02 '10 09:06

Ezombort


People also ask

How do I change the target framework in Visual Studio 2008?

Go to the properties of a project (Solution Explorer --> Project --> Properties or Menu Bar --> Project --> Properties) and on the Application tab you'll see Target Framework.


2 Answers

Just published Target Framework Migrator, Visual Studio Extension for changing multiple .Net projects Target Framework at once

like image 102
Pavel Samokha Avatar answered Oct 12 '22 10:10

Pavel Samokha


You can do that using Scott Dorman's Visual Studio macro available on CodeProject:

Visual Studio 2010 and Target Framework Version

Below is the code, download it to your <UserProfile>\Documents\Visual Studio 2010\Projects\VSMacros80\MyMacros folder, open the Visual Studio Macro IDE (Alt-F11) and add it as an existing item to the “MyMacros” project:

'------------------------------------------------------------------------------ ' Visual Studio 2008 Macros ' ' ProjectUtilities.vb ' '------------------------------------------------------------------------------ ' Copyright (C) 2007-2008 Scott Dorman ([email protected]) ' ' This library is free software; you can redistribute it and/or ' modify it under the terms of the Microsoft Public License (Ms-PL). ' ' This library is distributed in the hope that it will be useful, ' but WITHOUT ANY WARRANTY; without even the implied warranty of ' MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the ' Microsoft Public License (Ms-PL) for more details. '------------------------------------------------------------------------------ Imports System Imports EnvDTE Imports EnvDTE80 Imports EnvDTE90 Imports System.Diagnostics  Public Module ProjectUtilities      Private Class ProjectGuids         Public Const vsWindowsCSharp As String = "{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}"         Public Const vsWindowsVBNET As String = "{F184B08F-C81C-45F6-A57F-5ABD9991F28F}"         Public Const vsWindowsVisualCPP As String = "{8BC9CEB8-8B4A-11D0-8D11-00A0C91BC942}"         Public Const vsWebApplication As String = "{349C5851-65DF-11DA-9384-00065B846F21}"         Public Const vsWebSite As String = "{E24C65DC-7377-472B-9ABA-BC803B73C61A}"         Public Const vsDistributedSystem As String = "{F135691A-BF7E-435D-8960-F99683D2D49C}"         Public Const vsWCF As String = "{3D9AD99F-2412-4246-B90B-4EAA41C64699}"         Public Const vsWPF As String = "{60DC8134-EBA5-43B8-BCC9-BB4BC16C2548}"         Public Const vsVisualDatabaseTools As String = "{C252FEB5-A946-4202-B1D4-9916A0590387}"         Public Const vsDatabase As String = "{A9ACE9BB-CECE-4E62-9AA4-C7E7C5BD2124}"         Public Const vsDatabaseOther As String = "{4F174C21-8C12-11D0-8340-0000F80270F8}"         Public Const vsTest As String = "{3AC096D0-A1C2-E12C-1390-A8335801FDAB}"         Public Const vsLegacy2003SmartDeviceCSharp As String = "{20D4826A-C6FA-45DB-90F4-C717570B9F32}"         Public Const vsLegacy2003SmartDeviceVBNET As String = "{CB4CE8C6-1BDB-4DC7-A4D3-65A1999772F8}"         Public Const vsSmartDeviceCSharp As String = "{4D628B5B-2FBC-4AA6-8C16-197242AEB884}"         Public Const vsSmartDeviceVBNET As String = "{68B1623D-7FB9-47D8-8664-7ECEA3297D4F}"         Public Const vsWorkflowCSharp As String = "{14822709-B5A1-4724-98CA-57A101D1B079}"         Public Const vsWorkflowVBNET As String = "{D59BE175-2ED0-4C54-BE3D-CDAA9F3214C8}"         Public Const vsDeploymentMergeModule As String = "{06A35CCD-C46D-44D5-987B-CF40FF872267}"         Public Const vsDeploymentCab As String = "{3EA9E505-35AC-4774-B492-AD1749C4943A}"         Public Const vsDeploymentSetup As String = "{978C614F-708E-4E1A-B201-565925725DBA}"         Public Const vsDeploymentSmartDeviceCab As String = "{AB322303-2255-48EF-A496-5904EB18DA55}"         Public Const vsVSTA As String = "{A860303F-1F3F-4691-B57E-529FC101A107}"         Public Const vsVSTO As String = "{BAA0C2D2-18E2-41B9-852F-F413020CAA33}"         Public Const vsSharePointWorkflow As String = "{F8810EC1-6754-47FC-A15F-DFABD2E3FA90}"     End Class      '' Defines the valid target framework values.     Enum TargetFramework         Fx40 = 262144         Fx35 = 196613         Fx30 = 196608         Fx20 = 131072     End Enum      '' Change the target framework for all projects in the current solution.     Sub ChangeTargetFrameworkForAllProjects()         Dim project As EnvDTE.Project         Dim clientProfile As Boolean = False          Write("--------- CHANGING TARGET .NET FRAMEWORK VERSION -------------")         Try             If Not DTE.Solution.IsOpen Then                 Write("There is no solution open.")             Else                               Dim targetFrameworkInput As String = InputBox("Enter the target framework version (Fx40, Fx35, Fx30, Fx20):", "Target Framework", "Fx40")                 Dim targetFramework As TargetFramework = [Enum].Parse(GetType(TargetFramework), targetFrameworkInput)                  If targetFramework = ProjectUtilities.TargetFramework.Fx35 Or targetFramework = ProjectUtilities.TargetFramework.Fx40 Then                     Dim result As MsgBoxResult = MsgBox("The .NET Framework version chosen supports a Client Profile. Would you like to use that profile?", MsgBoxStyle.Question Or MsgBoxStyle.YesNo, "Target Framework Profile")                     If result = MsgBoxResult.Yes Then                         clientProfile = True                     End If                 End If                  For Each project In DTE.Solution.Projects                     If project.Kind <> Constants.vsProjectKindSolutionItems And project.Kind <> Constants.vsProjectKindMisc Then                         ChangeTargetFramework(project, targetFramework, clientProfile)                     Else                         For Each projectItem In project.ProjectItems                             If Not (projectItem.SubProject Is Nothing) Then                                 ChangeTargetFramework(projectItem.SubProject, targetFramework, clientProfile)                             End If                         Next                      End If                 Next             End If         Catch ex As System.Exception             Write(ex.Message)         End Try     End Sub      '' Change the target framework for a project.     Function ChangeTargetFramework(ByVal project As EnvDTE.Project, ByVal targetFramework As TargetFramework, ByVal clientProfile As Boolean) As Boolean         Dim changed As Boolean = True          If project.Kind = Constants.vsProjectKindSolutionItems Or project.Kind = Constants.vsProjectKindMisc Then             For Each projectItem In project.ProjectItems                 If Not (projectItem.SubProject Is Nothing) Then                     ChangeTargetFramework(projectItem.SubProject, targetFramework, clientProfile)                 End If             Next         Else             Try                 If IsLegalProjectType(project) Then                     SetTargetFramework(project, targetFramework, clientProfile)                 Else                     Write("Skipping project: " + project.Name + " (" + project.Kind + ")")                 End If             Catch ex As Exception                 Write(ex.Message)                 changed = False             End Try         End If          Return changed     End Function      '' Determines if the project is a project that actually supports changing the target framework.     Function IsLegalProjectType(ByVal proejct As EnvDTE.Project) As Boolean         Dim legalProjectType As Boolean = True          Select Case proejct.Kind             Case ProjectGuids.vsDatabase                 legalProjectType = False             Case ProjectGuids.vsDatabaseOther                 legalProjectType = False             Case ProjectGuids.vsDeploymentCab                 legalProjectType = False             Case ProjectGuids.vsDeploymentMergeModule                 legalProjectType = False             Case ProjectGuids.vsDeploymentSetup                 legalProjectType = False             Case ProjectGuids.vsDeploymentSmartDeviceCab                 legalProjectType = False             Case ProjectGuids.vsDistributedSystem                 legalProjectType = False             Case ProjectGuids.vsLegacy2003SmartDeviceCSharp                 legalProjectType = False             Case ProjectGuids.vsLegacy2003SmartDeviceVBNET                 legalProjectType = False             Case ProjectGuids.vsSharePointWorkflow                 legalProjectType = False             Case ProjectGuids.vsSmartDeviceCSharp                 legalProjectType = True             Case ProjectGuids.vsSmartDeviceVBNET                 legalProjectType = True             Case ProjectGuids.vsTest                 legalProjectType = False             Case ProjectGuids.vsVisualDatabaseTools                 legalProjectType = False             Case ProjectGuids.vsVSTA                 legalProjectType = True             Case ProjectGuids.vsVSTO                 legalProjectType = True             Case ProjectGuids.vsWCF                 legalProjectType = True             Case ProjectGuids.vsWebApplication                 legalProjectType = True             Case ProjectGuids.vsWebSite                 legalProjectType = True             Case ProjectGuids.vsWindowsCSharp                 legalProjectType = True             Case ProjectGuids.vsWindowsVBNET                 legalProjectType = True             Case ProjectGuids.vsWindowsVisualCPP                 legalProjectType = True             Case ProjectGuids.vsWorkflowCSharp                 legalProjectType = False             Case ProjectGuids.vsWorkflowVBNET                 legalProjectType = False             Case ProjectGuids.vsWPF                 legalProjectType = True             Case Else                 legalProjectType = False         End Select         Return legalProjectType     End Function      '' Sets the target framework for the project to the specified framework.     Sub SetTargetFramework(ByVal project As EnvDTE.Project, ByVal targetFramework As TargetFramework, ByVal clientProfile As Boolean)         Dim currentTargetFramework As TargetFramework = CType(project.Properties.Item("TargetFramework").Value, TargetFramework)         Dim targetMoniker As String = GetTargetFrameworkMoniker(targetFramework, clientProfile)         Dim currentMoniker As String = project.Properties.Item("TargetFrameworkMoniker").Value          If currentMoniker <> targetMoniker Then             Write("Changing project: " + project.Name + " from " + currentMoniker + " to " + targetMoniker + ".")             project.Properties.Item("TargetFrameworkMoniker").Value = targetMoniker             project.Properties.Item("TargetFramework").Value = targetFramework         Else             Write("Skipping project: " + project.Name + ", already at the correct target framework.")         End If     End Sub      Function GetTargetFrameworkMoniker(ByVal targetFramework As TargetFramework, ByVal clientProfile As Boolean) As String         Dim moniker As String = ".NETFramework,Version=v"         Select Case targetFramework             Case ProjectUtilities.TargetFramework.Fx20                 moniker += "2.0"              Case ProjectUtilities.TargetFramework.Fx30                 moniker += "3.0"              Case ProjectUtilities.TargetFramework.Fx35                 moniker += "3.5"              Case ProjectUtilities.TargetFramework.Fx40                 moniker += "4.0"          End Select          If clientProfile Then             moniker += ",Profile=Client"         End If          Return moniker     End Function      '' Writes a message to the output window     Sub Write(ByVal s As String)         Dim out As OutputWindowPane = GetOutputWindowPane("Change Target Framework", True)         out.OutputString(s)         out.OutputString(vbCrLf)     End Sub      '' Gets an instance of the output window     Function GetOutputWindowPane(ByVal Name As String, Optional ByVal show As Boolean = True) As OutputWindowPane         Dim win As Window = DTE.Windows.Item(EnvDTE.Constants.vsWindowKindOutput)         If show Then win.Visible = True         Dim ow As OutputWindow = win.Object         Dim owpane As OutputWindowPane         Try             owpane = ow.OutputWindowPanes.Item(Name)         Catch e As System.Exception             owpane = ow.OutputWindowPanes.Add(Name)         End Try         owpane.Activate()         Return owpane     End Function  End Module 
like image 45
Dirk Vollmar Avatar answered Oct 12 '22 09:10

Dirk Vollmar