উত্তর:
আপনি কোডড্রজেক্টে স্কট ডরম্যানের ভিজ্যুয়াল স্টুডিও ম্যাক্রো ব্যবহার করে এটি করতে পারেন:
নীচে কোডটি দেওয়া আছে, এটি আপনার <UserProfile>\Documents\Visual Studio 2010\Projects\VSMacros80\MyMacros
ফোল্ডারে ডাউনলোড করুন , ভিজ্যুয়াল স্টুডিও ম্যাক্রো আইডিই (Alt-F11) খুলুন এবং এটি "মাইম্যাক্রোস" প্রকল্পে বিদ্যমান আইটেম হিসাবে যুক্ত করুন:
'------------------------------------------------------------------------------
' Visual Studio 2008 Macros
'
' ProjectUtilities.vb
'
'------------------------------------------------------------------------------
' Copyright (C) 2007-2008 Scott Dorman (sj_dorman@hotmail.com)
'
' 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
সদ্য প্রকাশিত টার্গেট ফ্রেমওয়ার্ক মাইগ্রেটর , একাধিক। নেট প্রকল্পগুলি টার্গেট ফ্রেমওয়ার্ক একবারে পরিবর্তনের জন্য ভিজ্যুয়াল স্টুডিও এক্সটেনশন
একটি পাওয়ারশেল স্ক্রিপ্ট যা আমি আমার করতাম। স্বীকার করেছেন ব্রুস ফোর্স-ইশ
Get-ChildItem . -Recurse -Filter *.*proj |ForEach {
$content = Get-Content $_.FullName
$content |ForEach {
$_.Replace("<TargetFrameworkVersion>v4.0</TargetFrameworkVersion>", "<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>")
} |Set-Content $_.FullName
}
script1.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies
তাই set-executionpolicy remotesigned
এটি ঠিক করার জন্য আমি কমান্ড চালাই ।
Set-ExecutionPolicy RemoteSigned
আপনি স্থানীয় PowerShell স্ক্রিপ্টগুলি চালনা করতে পারবেন / ও সার্টি-স্বাক্ষর করে। বিশদগুলির জন্য এখানে দেখুন: টেকনিকট.মাইক্রোসফট.টেন
সবসময় সহজ আছে। নোটপ্যাড ++ এর মতো একটি শালীন পাঠ্য সম্পাদকটি ফাইল ফাংশনে সন্ধান / প্রতিস্থাপন অন্তর্ভুক্ত করবে। আপনার সিএসপোজ / ভিবিপ্রজ ফাইলগুলিতে কেবলমাত্র বর্তমান সংস্করণটির স্ট্রিং অনুসন্ধান করুন:
<TargetFrameworkVersion>v3.5</TargetFrameworkVersion>
এবং নতুন সংস্করণ দিয়ে প্রতিস্থাপন করুন
<TargetFrameworkVersion>v4.5</TargetFrameworkVersion>
প্রথমে চেক আউট করার জন্য ভাল ধারণা ...
বাশ থেকে:
$find . -name "*.csproj" -exec sed -b -i "s,<TargetFrameworkVersion>[^<]*</TargetFrameworkVersion>,<TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>," {} \;
আমি মনে করি এটি করার সহজতম উপায় হ'ল অনুসন্ধান এবং প্রতিস্থাপন সরঞ্জামটি ব্যবহার করা। এটি রিজেক্সকে সমর্থন করলে এটি একটি সুবিধা।
সেখানে অবশ্যই বেশ কয়েকটি থাকতে হবে - আমি প্রথম যা পরীক্ষা করেছি তা আমার জন্য কাজ করেছে, যদিও: http://www.ecobyte.com/replacetext/
উইন 7-তে এর কিছু সমস্যা রয়েছে বলে একটি নোট রয়েছে, তবে আমি এটি অনুভব করিনি।
সেই সরঞ্জামটিতে ধাপে ধাপে নির্দেশাবলী:
<TargetFrameworkVersion>.*</TargetFrameworkVersion>
)<TargetFrameworkVersion>4.0</TargetFrameworkVersion>
)এখন যদি কোনও কারণে আপনার কোডে এটি করা দরকার হয় তবে আমি সম্ভবত এটি করতে সক্ষম হব (এটি এই প্রশ্নটি আমি কীভাবে পেয়েছি)। সেক্ষেত্রে দয়া করে কমেন্টে অনুরোধ করুন।
পাভেল সামোখা (ভিএইচকিউএলএস) দ্বারা লক্ষ্য ফ্রেমওয়ার্ক মাইগ্রেটর
http://visualstudiogallery.msdn.microsoft.com/47bded90-80d8-42af-bc35-4736fdd8cd13
শর্তসাপেক্ষী রেজেক্সস আমাকে মাথা ব্যাথা দিচ্ছে। সুতরাং অনুসন্ধান / প্রতিস্থাপনের জন্য এখানে একটি কোডেড সমাধান রয়েছে (যতক্ষণ সম্ভব এনভিডিটিই এড়ানো হচ্ছে)।
অর্ডার প্রকল্পের ফাইল এন্ট্রিগুলির জন্য গুরুত্বপূর্ণ মনে হচ্ছে না :
এই লাইন বরাবর কিছু চেষ্টা করুন:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.IO;
using System.Text.RegularExpressions;
namespace TextReplaceDemo
{
class Program
{
static void Main(string[] args)
{
try
{
ReplaceTargetFrameworkVersion("v4.0", "c:/projekt/2005", "*.csproj");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
/// <summary>
/// Inserts the denoted targetFramework into all occurrences of TargetFrameworkVersion.
/// If the TargetFrameworkVersion is not present in the file, the method searches for the
/// OutputType tag, which should be present, and inserts the TargetFrameworkVersion before that.
/// </summary>
/// <param name="targetFramework">New target framework (e.g. "v4.0")</param>
/// <param name="rootDirectory">Root directory for the file search (e.g. "c:\Projects\2005")</param>
/// <param name="fileSearchPattern">Pattern to find the project files (e.g. "*.csproj).
/// Will get all files for empty parameter.</param>
public static void ReplaceTargetFrameworkVersion(string targetFramework, string rootDirectory, string fileSearchPattern)
{
if (string.IsNullOrEmpty(targetFramework)) throw new ArgumentNullException("targetFramework");
if (string.IsNullOrEmpty(rootDirectory)) throw new ArgumentNullException("rootDirectory");
if (string.IsNullOrEmpty(fileSearchPattern)) fileSearchPattern = "*.*";
string regexPattern = "<TargetFrameworkVersion>.*</TargetFrameworkVersion>";
string insertText = string.Format("<TargetFrameworkVersion>{0}</TargetFrameworkVersion>", targetFramework);
string alternativeMarker = "<OutputType>";
// get all files
List<FileInfo> files = GetAllFiles(rootDirectory, fileSearchPattern);
// iterate over found files
foreach (var file in files)
{
string fileContent = File.ReadAllText(file.FullName);
Match match = Regex.Match(fileContent, regexPattern);
string newfileContent = null;
if (match.Success)
{
// replace <TargetFrameworkVersion>
newfileContent = fileContent.Replace(match.Value, insertText);
}
else if (fileContent.Contains(alternativeMarker))
{
// create <TargetFrameworkVersion>
newfileContent = fileContent.Replace(alternativeMarker,
insertText + Environment.NewLine + " " + alternativeMarker);
}
// overwrite file
if (newfileContent != null)
File.WriteAllText(file.FullName, newfileContent);
}
}
/// <summary>
/// Recursive function to find all files in a directory by a searchPattern
/// </summary>
/// <param name="path">Path to the root directory</param>
/// <param name="searchPattern">Pattern for the file search, e.g. "*.txt"</param>
public static List<FileInfo> GetAllFiles(string path, string searchPattern)
{
List<FileInfo> files = new List<FileInfo>();
DirectoryInfo dir = new DirectoryInfo(path);
if (dir.Exists)
{
// get all files in directory
files.AddRange(dir.GetFiles(searchPattern));
// get all files of subdirectories
foreach (var subDir in dir.GetDirectories())
{
files.AddRange(GetAllFiles(subDir.FullName, searchPattern));
}
}
return files;
}
}
}
আপনি এটি করার জন্য ম্যাক্রো ব্যবহার করতে পারেন বা মনে রাখতে হবে ভিএস প্রকল্প ফাইলগুলি পাঠ্য ফাইল, যার অর্থ একটি সাধারণ বৈশ্বিক অনুসন্ধান এবং প্রতিস্থাপন একই অর্জন করতে পারে এবং প্রচুর প্রকল্পের ফাইলগুলিতে একই পরিবর্তন আনার জন্য আরও সাধারণ কৌশল।
প্রথমে একটি বিদ্যমান প্রকল্প ফাইলটির ব্যাক আপ দিন, তারপরে আপনি চান পরিবর্তন করুন (উদাঃ, লক্ষ্য কাঠামো পরিবর্তন করুন)। ব্যাক আপের সাথে নতুন প্রকল্প ফাইলটি তুলনা করতে উইনডিফ বা উইনমার্জ ব্যবহার করুন । এটি আপনাকে কী পরিবর্তন করতে হবে তা বলবে। তারপরে আপনার সমস্ত প্রকল্পের ফাইলগুলিতে পরিবর্তন আনতে ভিজ্যুয়াল স্টুডিও আইডিই'র ফাইন্ড ইন ফাইলে ফাংশনটি ব্যবহার করুন।
কোনও বাহ্যিক সরঞ্জাম (এবং অন্যান্য সেটিংস, উদাহরণস্বরূপ সরঞ্জামের সংস্করণ পরিবর্তন করার ক্ষমতা) সহ একটি বিকল্প:
<ItemGroup>
<None Include="**\*.csproj" />
</ItemGroup>
অন্যান্য প্রকল্পের ধরণের জন্য এটি সহজেই বাড়ানো যেতে পারে।