2009-05-12 18 views
11

Çok başvurulan bir sınıfı bir ad alanından diğerine taşımayı deniyorum. Dosyayı farklı bir kök ad alanına sahip yeni projeye taşımak, çözümüm boyunca 1100'den fazla hatayla sonuçlanır.Çok başvurulan bir sınıfın ad alanını değiştirmenin en iyi yolu nedir?

sınıfa bazı referanslar tam namescape referanslamaya dahil ve diğerleri ad alanının içe aktarma içerir.

sınıfa tüm referanslar değiştirecek umuduyla, ad yeniden adlandırmak için bir üstlenmeden aracı (Elden Geçirme Pro) kullanarak denedi, ama bu yukarıda bahsedilen soruna yol açtı.

Herkes elle her dosya içine delmeye gerek ve tam ad değiştirerek veya zaten mevcut değilse yenisini almadan bu zorluğun üstesinden nasıl fikirleri var?

Teşekkürler.

+1

Bu soruna dikkat çekenler için. Gerçek bir şeylerin karıştığı Resharper'ı denedim. Sonunda temel bir 'Dosyalarda Değiştir' işi yaptı. Bunun için teknik, önce yüksek nitelikli tüm referansların yerini almak, daha sonra da daha az kalifiye olmak ve ardından ithalatı elle düzeltmek oldu. Bu beni 30 dakika sürdü. Çapraz kesim endişeleri bir acıdır. – Llyle

cevap

5

Resharper. kullanmaya çalışın Geçmişte, çok iyi başvurulan ad alanlarını tam olarak nitelenen ve hiç sorun yaşamadan içe aktarma yapmak için geçmişte kullandım. Eğer küresel bir arama yaparak çok fazla derde ve tam adı üzerinde yerini almamalıdır gibi

+0

Kesinlikle bir seçenek, ad alanı değişikliği için bir avuç nakit çıkarmak için gerek kalmaz :) – Llyle

+1

Resharper pahalıdır biliyorum, ama şimdi onsuz yaşayamam. – CodeLikeBeaker

+1

bir sürü nakit değildir. kendini bir hafta gibi öder. –

1

Sizin durumunuza yardımcı olacak bir şey yapmıyorum.

  1. Ad alanını değiştirdiğinizde, IDE, ad alanının sonunda küçük kırmızı dikdörtgen gösterecektir.
  2. Ctrl + tuşlarına basın. ve en çok sevdiğiniz seçeneği seçin.

ReSharper gibi bir araç kullanıyorsanız, ad alanına tıklayın ve Ctrl + R tuşlarına basın. Ad alanını yeniden adlandır iletişim kutusunda yönergeleri izleyin.

+0

Bu tam olarak kaçınmak istediğim şey. 1100+ hataları düzeltmek için dosyaların her birine girme geliştirici zamanının çok verimli kullanıldığını görünmüyor. – Llyle

+0

Düzeltmeniz gerekmez. VS veya ReSharper sizin için yeniden düzenleyecektir. Ad alanını yalnızca bir dosya üzerinde değiştirmeniz ve aynı ad alanını kullanan tüm dosyalarda isim alanının değiştirilmesi gerekecektir. – Vadim

+2

1100+ hataların her birini düzeltmek için Visual Studio 2008 Standard Edition'ı kullanmak manuel bir işlemdir ve çok zaman alır. ReSharper bir seçenektir, ancak ad alanı değiştirme için başka bir refactoring aracı eklemek fazladan görünmektedir. – Llyle

1

görünüyor. Yani oldspace :: myclass için bir arama yapın ve yerine newspace :: myclass yazın. Bir dosyanın üstüne çizgiler ekleme ya korkunç zor değildir ve muhtemelen tabii böyle bir yaklaşımla, bazı riskler vardır

using oldspace; 
using newspace; 

ile

using oldspace; 

yerini alabilir. Kendinize ince problemler vermeniz oldukça kolay.

+0

Yeni başlayanlar için, C tabanlı bir dil değil, VB'dir, ancak her ikisini de belirleme fikri, normal ifadeyle değiştirilemez. Ama sonra isim alanının iki kez içe aktarıldığı 500 hatası aştım :) – Llyle

+0

Ah, bunun için üzgünüm, etiketi özledim ve soru belirtmedi. İtiraf etmeliyim ki, arama ve değiştirme çözümleri yarım saatten fazla sürmeye başladığında, genellikle kendime özel durumumu ele almak için özel bir arama ve değiştirme aracı yazarım. Gereksinim duyduğunuz aracı zaten yazmış gibi geliyor, ancak bunun için ödeme yapmak isteyip istemediğinize karar vermelisiniz;). – AHelps

4

Burada bir acı ad yeniden adlandırma gerçekleştirmek için kullandığınız bir Powershell senaryo. Benim durumumda, ortak bir kütüphanenin (CSLA) ağır kullanımını sağlayan yaklaşık 5000 VB.Net ve C# kaynak dosyaları vardı. tartışmaya değmez nedenlerden dolayı, ben CslaLegacy için ad CSLA adlandırmak gerekiyordu. Minimum çaba ile, bu komut dosyasını kendi ihtiyaçlarınıza göre uyarlamanız gerekir. Komut dosyası, .vb ve .cs dosyalarını arayan kaynak ağacı yinelemeli olarak arar. $ RepValues ​​karma tablosu, değiştirilmesi gereken dizeleri içerir. Bu komut dosyasının bir varyasyonu, yeniden adlandırmanız için bir montaj adı değişikliği içermesi gerektiğinde, proje referanslarını güncellemek için de kullanılabilir. Değişiklikten önce dosyayı kontrol etmek için kaynak kontrol aracınıza bir çağrı ekleyebilirsiniz. Bunu aslında TFS için yaptım, ancak tf.exe'yi çalıştırmayı yavaş buldum. Sonunda, betiği çalıştırmadan önce tüm kaynak ağacını kolayca kontrol etmek çok daha hızlıydı. Hata ayıklama ve powershell komut dosyalarını çalıştırmak için PowerGUI komut düzenleyicisini kullanıyorum.

$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

keskin C geçmek için bir başka neden. Kaynak kodunun VS 2008'de ücretsiz olarak yeniden yapılandırılması.

İlgili konular