2009-05-12 12 views
11

मैं एक उच्च संदर्भित कक्षा को एक नामस्थान से दूसरे नाम पर स्थानांतरित करने का प्रयास कर रहा हूं। बस फ़ाइल को नए प्रोजेक्ट में ले जायें जिसमें मेरे समाधान के दौरान 1100 से अधिक त्रुटियों में एक अलग रूट नेमस्पेस परिणाम हैं।अत्यधिक संदर्भित कक्षा के नामस्थान को बदलने का सबसे अच्छा तरीका क्या है?

कक्षा के कुछ संदर्भों में पूरी तरह से योग्य नामांकन संदर्भ शामिल है और अन्य में नामस्थान का आयात शामिल है।

मैंने नामस्थान का नाम बदलने के लिए एक रिफैक्टरिंग टूल (रिफैक्टर प्रो) का उपयोग करने की कोशिश की है, आशा है कि कक्षा के सभी संदर्भ बदल जाएंगे, लेकिन इसके परिणामस्वरूप उपर्युक्त समस्या हुई।

किसी के पास इस फ़ाइल को मैन्युअल रूप से ड्रिल करने और पूरी तरह से योग्य नेमस्पेस बदलने या नए आयात करने की आवश्यकता के बिना इस चुनौती से निपटने के बारे में विचार हैं यदि यह पहले से मौजूद नहीं है?

धन्यवाद।

+1

इस समस्या को मारने वालों के लिए। मैंने रिसारपर की कोशिश की, जिसने चीजों की असली गड़बड़ी की। अंत में एक बुनियादी 'फाइलों में बदलें' ने नौकरी की। इसके लिए तकनीक पहले सभी योग्य योग्य संदर्भों को प्रतिस्थापित करना था और फिर कम योग्यता और फिर मैन्युअल रूप से आयात को ठीक करना था। यह मुझे 30 मिनट ऊपर ले गया। क्रॉस कटिंग चिंताओं में दर्द होता है। – Llyle

उत्तर

5

Resharper. का उपयोग करने का प्रयास करें मैंने अत्यधिक संदर्भित नामस्थानों को पुन: सक्रिय करने के लिए अतीत में इसका उपयोग किया है, दोनों पूरी तरह से योग्य और बिना किसी समस्या के आयात किए गए हैं।

+0

निश्चित रूप से एक विकल्प, मैं नामस्थान परिवर्तन के लिए नकद का एक गुच्छा बाहर निकालना नहीं चाहता हूं :) – Llyle

+1

मुझे पता है कि रिशेर्पर महंगा है, लेकिन मैं इसके बिना अब नहीं रह सकता। – CodeLikeBeaker

+1

यह नकदी का एक गुच्छा नहीं है। यह एक हफ्ते की तरह खुद को भुगतान करता है। –

1

मुझे नहीं लगता कि यह आपके मामले में सहायक होगा।

  1. नामस्थान संशोधित करें, वीएस आईडीई आपको नामस्थान के अंत में थोड़ा लाल आयताकार दिखाएगा।
  2. Ctrl + दबाएं। और सबसे अधिक पसंद विकल्प का चयन करें।

यदि आप रीशेपर जैसे टूल का उपयोग कर रहे हैं, तो नामस्थान पर क्लिक करें और Ctrl + R दबाएं। नामस्थान संवाद बॉक्स का नाम बदलने में निर्देश का पालन करें।

+0

यह वही है जो मैं टालना चाहता हूं। 1100+ त्रुटियों को सही करने के लिए फ़ाइलों में से प्रत्येक में जाकर डेवलपर समय का बहुत उत्पादक उपयोग नहीं लगता है। – Llyle

+0

आपको सही करने की आवश्यकता नहीं है। वीएस या रीशेपर आपके लिए इसे दोबारा कर देगा। आपको नामस्थान केवल एक फ़ाइल को संशोधित करने की आवश्यकता है और नामस्थान को उसी नामस्थान का उपयोग करने वाली सभी फ़ाइलों में संशोधित किया जाएगा। – Vadim

+2

1100+ त्रुटियों में से प्रत्येक को सही करने के लिए विजुअल स्टूडियो 2008 मानक संस्करण का उपयोग करना एक मैन्युअल प्रक्रिया है और इसमें अधिक समय लगता है। रीशेपर एक विकल्प है, लेकिन नेमस्पेस बदलने के लिए एक और रिफैक्टरिंग टूल जोड़ना ओवरकिल लगता है। – Llyle

1

ऐसा लगता है कि आपको वैश्विक खोज करने और पूरी तरह से योग्य नाम पर प्रतिस्थापित करने में बहुत अधिक परेशानी नहीं होनी चाहिए। तो पुरानी स्पेस :: myclass पर एक खोज करें और इसे न्यूज़ स्पेस :: myclass के साथ बदलें। एक फ़ाइल के शीर्ष पर लाइनों को जोड़ने से या तो बहुत मुश्किल नहीं है, और आप शायद

using oldspace; 
using newspace; 

साथ

using oldspace; 

बदल सकते इस तरह एक दृष्टिकोण, निश्चित रूप से के साथ कुछ जोखिम भी हैं। खुद को सूक्ष्म समस्याओं का कारण बनना काफी आसान है।

+0

स्टार्टर्स के लिए यह वीबी है, सी-आधारित भाषा नहीं है, लेकिन दोनों को निर्दिष्ट करने का विचार नियमित अभिव्यक्ति वैश्विक प्रतिस्थापन के साथ किया जा सकता है। लेकिन, मुझे 500 से अधिक त्रुटि मिलती है जहां नामस्थान दो बार आयात किया जाता है :) – Llyle

+0

आह, इसके बारे में खेद है, मुझे टैग याद आया, और सवाल निर्दिष्ट नहीं किया गया। मुझे स्वीकार करना होगा, जब खोज-और-प्रतिस्थापन समाधान आधे घंटे से अधिक समय लेना शुरू करते हैं, तो मैं आमतौर पर अपनी विशिष्ट स्थिति को संभालने के लिए एक कस्टम खोज-और-प्रतिस्थापन उपकरण लिखता हूं। ऐसा लगता है कि किसी ने पहले से ही आपको आवश्यक टूल लिखा है, इसलिए आपको यह तय करना होगा कि आप इसके लिए भुगतान करना चाहते हैं;)। – AHelps

4

यहां एक Powershell स्क्रिप्ट है जिसे मैंने एक दर्दनाक नामस्थान नाम बदलने के लिए उपयोग किया है। मेरी स्थिति में लगभग 5000 वीबी.Net और सी # स्रोत फाइलें थीं जो एक सामान्य पुस्तकालय (CSLA) का भारी उपयोग करती थीं। चर्चा के लायक नहीं होने के कारणों के लिए, मुझे नामस्थान सीएसला से CslaLegacy का नाम बदलने की आवश्यकता है। कम से कम प्रयास के साथ, आप इस स्क्रिप्ट को अपनी विशिष्ट जरूरतों को अनुकूलित करने में सक्षम होना चाहिए। स्क्रिप्ट दोबारा .vb और .cs फ़ाइलों की तलाश में स्रोत पेड़ की खोज करता है। $ RepValues ​​हैश तालिका में स्ट्रिंग्स हैं जिन्हें प्रतिस्थापित करने की आवश्यकता है। प्रोजेक्ट संदर्भों को अपडेट करने के लिए इस स्क्रिप्ट का एक भिन्नता भी उपयोग किया जा सकता है, क्या आपके नाम में एक असेंबली नाम परिवर्तन शामिल होना चाहिए। संशोधन से पहले फ़ाइल को चेकआउट करने के लिए आप अपने स्रोत नियंत्रण उपकरण में एक कॉल जोड़ सकते हैं। मैंने मूल रूप से यह टीएफएस के लिए किया था, लेकिन यह tf.exe निष्पादित करने में धीमा पाया। अंत में स्क्रिप्ट चलाने से पहले पूरे स्रोत पेड़ को चेकआउट करना बहुत तेज़ था। मैं डीबगिंग और पावरहेल स्क्रिप्ट चलाने के लिए PowerGUI स्क्रिप्ट संपादक का उपयोग करता हूं।

$root = "c:/path/to/your/source" 

cd $root 
$files = Get-ChildItem -Path $root -Recurse -include *.cs,*.vb 

$repValues = 
@{ 
'using Csla;'    = 'using CslaLegacy;'; 
'using Csla.Validation;' = 'using CslaLegacy.Validation;'; 
'using Csla.Data;'   = 'using CslaLegacy.Data;'; 
'Imports Csla'    = 'Imports CslaLegacy'; 
'Imports Csla.Validation' = 'Imports CslaLegacy.Validation'; 
} 

$stmtsToReplace = @() 
foreach ($key in $repValues.Keys) { $stmtsToReplace += $null } 
$repValues.Keys.CopyTo($stmtsToReplace, 0) 

foreach ($file in $files) 
{ 
$path = [IO.Path]::Combine($file.DirectoryName, $file.Name) 

$sel = Select-String -Pattern $stmtsToReplace -Path $path -l 

if ($sel -ne $null) 
{ 
    write "Modifying file $path" 

    (Get-Content -Encoding Ascii $path) | 
    ForEach-Object { 
     $containsStmt = $false 
     foreach ($key in $repValues.Keys) 
     { 
      if ($_.Contains($key)) 
      { 
       $_.Replace($key, $repValues[$key]) 
       $containsStmt = $true 
       break 
      } 
     } 
     if (!$containsStmt) { $_ } 
    } | 
    Set-Content -Encoding Ascii $path 
} 
} 
-1

सी तेज करने के लिए स्विच करने का एक अन्य कारण। वीएस 2008 में मुफ्त में निर्मित स्रोत कोड का पुनर्विक्रय।

संबंधित मुद्दे

 संबंधित मुद्दे