.NET 4.5.2 के समाधान में सभी परियोजनाओं को फिर से बनाना


96

मेरे पास विजुअल स्टूडियो 2012 में 170 सी # प्रोजेक्ट के साथ एक समाधान है। मुझे .NET फ्रेमवर्क 4.0 से 4.5.2 तक सभी परियोजनाओं को फिर से प्राप्त करने की आवश्यकता है।

मैं प्रत्येक प्रोजेक्ट के गुणों में जाकर, लक्षित रूपरेखा को बदलते हुए, और Visual Studio को .csproj फ़ाइलों में कोई भी परिवर्तन करने देता हूँ, इसे विजुअल स्टूडियो को संभालने देना चाहता हूँ।

मैंने देखा कि वर्तमान प्रोजेक्ट की कुछ विशेषताओं के आधार पर इन परिवर्तनों में .csproj में कुछ नए XML टैग जोड़ना शामिल हैं।

मैं केवल लक्षित संस्करण संख्या को बदलने के लिए एक बदले हुए पाठ उपकरण का उपयोग किए बिना सभी 170 सी # परियोजनाओं को कैसे पुनर्प्राप्त कर सकता हूं? मैं चाहता हूं कि विज़ुअल स्टूडियो सभी आवश्यक टैग संशोधनों और परिवर्धन करें और अकेले प्रतिस्थापित करें ऐसा होने की अनुमति नहीं देगा।


मुझे यह स्वचालित रूप से करने का कोई तरीका नहीं पता है। मुझे लगता है कि आपका सबसे अच्छा दांव एक मानक विंडोज़ मैक्रो रिकॉर्डर होगा, जिसे आप कीबोर्ड कमांड का उपयोग करते हैं .. लेकिन, मैं उन्हें बैच करने की कोशिश करने के बजाय एक समय में इन पर अमल करूंगा। साथ में चूंकि यह पहचानना मुश्किल हो सकता है कि वीएस को सभी मामलों में अपने काम के साथ किया गया है।
एरिक Funkenbusch

1
नहीं, आपको ऐसा नहीं करना चाहिए। विशेष रूप से 4.5.2 नहीं, इसमें कोई उपयोगी नए प्रकार नहीं हैं और भविष्य में बहु-लक्ष्यीकरण पैक द्वारा कवर किए जाने की संभावना नहीं है। जैसे 4.0x नहीं था। यह एक समय में एक ही प्रोजेक्ट करें और केवल उसी की जरूरत है। वे जहाँ आप वास्तव में एक नया संदर्भ असेंबली जोड़ना चाहते हैं और उनका उपयोग करने के लिए कोड को संशोधित करते हैं। यदि आप इस सलाह को अनदेखा करना चाहते हैं, तो आप शायद करते हैं, तो * .csproj फ़ाइलों में TargetFrameworkVersion तत्व को बदलने के लिए फ़ाइलों में बदलें> ढूँढें और बदलें> का उपयोग करें। सुनिश्चित करें कि आपका स्रोत नियंत्रण ठोस है।
हंस पैशन

1
@HansPassant खोज / प्रतिस्थापन का आपका समाधान वही है जो मैं अपने प्रश्न के अनुसार नहीं करना चाहता था। मुझे और अधिक मजबूत समाधान की आवश्यकता है।
काइल वी।

@GranWinney I / पता है / यह काम नहीं करेगा क्योंकि मैंने पहले ही फाइंड / रिप्लेस की कोशिश की है और यदि आप उस पद्धति का उपयोग करते हैं तो अतिरिक्त .csproj में परिवर्तन होता है जो Visual Studio ने किया होगा अन्यथा कार्यान्वित नहीं किया जाता है।
काइल वी।

1
@GranWinney लक्ष्य फ्रेमवर्क माइग्रेटर एक्सटेंशन वही करता है जो मैं चाहता था। यदि आप एक उत्तर बना सकते हैं तो मैं इसे सही चिह्नित करूंगा। धन्यवाद!
काइल वि।

जवाबों:


84

MSDN प्रलेखन " .NET फ्रेमवर्क 4.5 के लिए माइग्रेशन गाइड " और " कैसे एक एप्लिकेशन को कॉन्फ़िगर करने के लिए समर्थन .NET फ्रेमवर्क 4 या 4.5 " केवल संशोधित परियोजनाओं पर चर्चा करता है। संपूर्ण समाधान में एक बार में परिवर्तन करने के बारे में कोई विवरण नहीं है, और न ही मैंने वीएस में कोई फ़ंक्शन देखा है जो इसका समर्थन करता है।

हालाँकि, विज़ुअल स्टूडियो गैलरी में लक्ष्य फ़्रेमवर्क माइग्रेटर नामक एक (अच्छी तरह से रेटेड) एक्सटेंशन उपलब्ध है, जो 4.5.2 (साथ ही नए संस्करण **) में अपग्रेड करने का समर्थन करता है और ऐसा लगता है कि जैसा आप चाहते हैं वैसा ही करेंगे। स्रोत कोड GitHub पर उपलब्ध है , यदि आप रुचि रखते हैं।

ध्यान दें कि इस तरह की सुविधा की कमी जानबूझकर (और न केवल एक चूक हो सकती है)। मैं सिर्फ अनुमान लगा रहा हूं, लेकिन हो सकता है कि एमएस के आंकड़े केवल ऐसे प्रोजेक्ट्स की जरूरत हो, जिन्हें नए फ्रेमवर्क की जरूरत होगी। एफडब्ल्यूआईडब्ल्यू, यदि आप कुछ परियोजनाओं को अपग्रेड करते हैं जो अन्य समाधानों के साथ साझा किए जाते हैं, तो वे समाधान तब तक निर्माण करने में विफल हो सकते हैं जब तक कि वे भी उन्नत न हों

कहा जा रहा है, यदि आप एक छोटी सी दुकान में (केवल कुछ या कुछ) समाधानों के साथ हैं और आप एक बार में सब कुछ अपग्रेड करना चाहते हैं, तो शायद उपरोक्त उपकरण आपके लिए काम करेगा।


वर्षों से इस पर कोई विकास नहीं हुआ है , और जाहिर है कि डेवलपर की योजना किसी और को बैटन को पारित करने की नहीं है।

यदि आप नए .NET फ्रेमवर्क संस्करण के साथ काम करने में असमर्थ हैं, तो सुधार के लिए मौजूदा पीआर और मुद्दों की जांच करें , लेकिन आपको उन्हें स्वयं लागू करना पड़ सकता है। उदाहरण के लिए, किसी ने .NET फ्रेमवर्क v 4.7.1 के लिए एक फिक्स पोस्ट किया है । उम्मीद है कि ये विलीन हो जाएंगे, लेकिन मैं अपनी सांस नहीं रोक पाऊंगा।

यदि किसी और को अनस (टिप्पणियों में) के रूप में एक ही त्रुटि दिखाई दे रही है, तो यहां कुछ सप्ताह पहले एक GitHub मुद्दा है, और संभवतः 2017 से एक और संबंधित मुद्दा है। यदि आप एक ही समस्या हो रही है, तो अंगूठे पर विचार करें और उन्हें अधिक विवरण जोड़ दें। ।


7
नवीनतम वीएस 2017 अपडेट 15.5.5, "अमान्य पैरामीटर" पर "लक्ष्य फ्रेमवर्क माइग्रेटर" टूल विफल हो रहा है
अनस

1
VS2017 15.7 से फ्रेमवर्क 4.7
टॉड

मुझे बहुत संदेह है कि एमएस जानबूझकर उपयोगकर्ताओं के लिए सुविधाओं का लाभ उठाएगा ... बहुत अधिक संभावना है कि यह सिर्फ कुछ और है जिसके बारे में उन्होंने सोचा नहीं था या समर्थन नहीं करना है ... इसे समुदाय को
भेजें

1
@Grant मैंने मौजूदा मुद्दे पर एक टिप्पणी जोड़ी। मैंने वास्तव में एक खोज / सीड खोज के साथ काम किया और परियोजना और कॉन्फ़िगर फ़ाइलों में प्रतिस्थापित किया।
जेबी मोनिका के साथ।

2
डेवलपर ने 2019 की तारीख में बैटन को पारित कर दिया, आप अपने (अच्छे) उत्तर को फिर से संपादित कर सकते हैं :)
लुडोविक फेल्ट्ज

12

.NET फ्रेमवर्क समाधान के लिए, एक सरल " फाइलों में बदलें " ने मेरे लिए चाल चली:

उदाहरण : .NET फ्रेमवर्क 4.5.2 से .NET फ्रेमवर्क 4.7.2

में package.config फ़ाइलें, सब की जगह

targetFramework="net452" 

सेवा

targetFramework="net472" 

में * .csproj फ़ाइलों, सभी की जगह

<TargetFrameworkVersion>v4.5.2</TargetFrameworkVersion> 

सेवा

<TargetFrameworkVersion>v4.7.2</TargetFrameworkVersion>

1
वीएस 2019 में, "सभी को बदलें" काफी काम नहीं करता है। आपको बार-बार "अगला ढूंढना" का उपयोग करना होगा। यह मेरी आखिरी Microsoft आधारित विकास परियोजना है। मैं MacOSX पर जा रहा हूं जहां स्थिरता है और क्यूए का एक सभ्य स्तर उनके उत्पादों पर प्रदर्शन किया है।
ATL_DEV

1
Package.config में targetFramework को बदलना उस फ्रेमवर्क के लिए पैकेज को पुनर्स्थापित नहीं करता है, इसलिए आप अभी भी गलत संस्करण के साथ समाप्त हो सकते हैं। आपको पैकेज को पुनर्स्थापित करना होगा, या कम से कम अपने पैकेज फ़ोल्डर को हटाना होगा और पैकेज के सही संस्करण को पुनर्स्थापित करना होगा। समस्या पुराने संकुल के साथ है। कॉन्फ़िगर मॉडल, बिना पुन: स्थापित किए, आप पैकेज के लिए dll संदर्भ लेंगे, पैकेज के गलत उपनिर्देशिका में गलत dll को लक्षित करेंगे।
त्रिनको

3
वाह, छुट्टी के बाद फिर से इस सवाल पर वापस आ गया और इसी जवाब पर टिप्पणी करने की जरूरत भी देखी, हा। मैं जोड़ दूंगा कि * .csproj और package.config फाइलें केवल ऐसी चीजें नहीं हैं जो लक्ष्य ढांचे का संदर्भ देती हैं। विभिन्न खंडों में web.config फ़ाइलों के संदर्भ भी हैं। उदाहरण के लिए, system.web के तहत, संकलन और httpRuntime टैग में एक targetFramework विशेषता है जिसे अपडेट करने की आवश्यकता होगी। इसलिए, यह 'खोज और प्रतिस्थापित' मैनुअल प्रक्रिया वास्तव में एक भयानक विचार की तरह लगता है जो आपकी परियोजनाओं को असंगत और भ्रष्ट स्थिति में छोड़ सकता है।
त्रिनको

9

चूंकि टारगेट फ्रेमवर्क माइग्रेटर टूट गया है, मैंने अपनी खोज / प्रतिस्थापित को रोल किया (git bash का उपयोग करके, यह विंडोज़ पर ठीक काम करता है); मूल रूप से यह परिवर्तन v4.6.x में v4.7.2 , तो यह कुख्यात डॉस के CRLF उपयोग करने के लिए फ़ाइलों को वापस धर्मान्तरित:

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

4
मुझे यह मिला, और फिर एक Update-Package -ReInstallचमत्कार हुआ। धन्यवाद!
आस्कर

1
यह मेरे लिए पूरी तरह से ठीक है। इस समाधान के लिए धन्यवाद
मरियम


7

मैंने संपूर्ण समाधान के लिए लक्ष्य फ्रेमवर्क संस्करणों को स्थानांतरित करने के लिए खुद को एक सरल उपकरण बनाया है, क्योंकि लक्ष्य फ़्रेमवर्क माइग्रेटर एक्सटेंशन विज़ुअल स्टूडियो 2017 का समर्थन नहीं करता है। मेरे GitHub रिपॉजिटरी https://github.com/Xpitfire/TargetFrameworkMigrator से टूल डाउनलोड करें

मुझे पता है कि यह जाने का सबसे अच्छा तरीका नहीं है, लेकिन इसने मेरे लिए काम किया और शायद यह किसी और की मदद भी करेगा।


यह अब सुनिश्चित है।
Jay Croghan

3

लक्ष्य फ्रेमवर्क माइग्रेटर बहुत उपयोगी है। डिफ़ॉल्ट रूप से, यह v4.7 तक आता है। हालाँकि, v4.7.1, v4.7.2 और v4.8 के लिए समर्थन जोड़ना आसान है।

C: \ Users {username} \ AppData \ Local \ Microsoft \ VisualStudio \ फ़ोल्डर में फ्रेमवर्कएक्सएमएल फ़ाइल ढूंढें और इन रूपरेखा संस्करणों को जोड़कर संपादित करें:

<Framework Id="262152" Name=".NETFramework,Version=v4.8"/>
<Framework Id="262663" Name=".NETFramework,Version=v4.7.2"/>
<Framework Id="262407" Name=".NETFramework,Version=v4.7.1"/>

दृश्य स्टूडियो को पुनरारंभ करने के बाद, आपको नए संस्करण दिखाई देंगे।


3
एक कांटा w / एक VS2019 संगत रिलीज है जो पहले से ही github.com/Ian1971/TargetFrameworkMigrator/releases
स्कॉट्स

आपका बहुत बहुत धन्यवाद! यह एक बहुत अच्छा और आसान समाधान था!
विलय

2
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();
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.