tüm projenin ad alanı nasıl değiştirilir?


104

Bu makaleden demo uygulamasını değiştiriyorum: http://msdn.microsoft.com/en-us/magazine/dd419663.aspx

Ad alanımı kullanmak için tüm dosyaları güncellemem gerekiyor, örneğin şimdi burada bulunan dosya:

MySolution\MyApp\DemoApp\ViewModel\MainWindowViewModel.cs

böyle bir ad alanı kullanıyor:

namespace DemoApp.ViewModel
{
/// <summary>
/// The ViewModel for the application's main window.
/// </summary>
public class MainWindowViewModel : WorkspaceViewModel

Dosyayı buraya taşımam gerekiyor (DemoApp klasörünü kaldırın):

MySolution\MyApp\ViewModel\MainWindowViewModel.cs

ve ayrıca doğru ad alanını kullanmak için:

namespace MyApp.ViewModel
{
....

Visual Studio 2010'da bunu nasıl yapmalı?

Güncelleme tamam burada olası yinelenen Visual Studio'da Proje Ad Alanını Değiştirin Şimdi projenin ad alanını nasıl değiştireceğimi biliyorum, ancak dosya sistemindeki dosyaları nasıl taşıyacağımı? ("DemoApp" klasöründen kurtulun)


4
Bilginize olduğu gibi, .NET'teki klasör yapısıyla eşleşmesi için ad alanlarına ihtiyacınız yoktur, gerekli değildir.
James Michael Hare

1
James'in dediği gibi, bu gerekli değil .. ama üzerinde çalışmam gereken bir uygulamada birinin neden "işi bitirmediğini" sormak istiyorum.
NotMe

1
Dosyaların taşınmasıyla ilgili olarak .. Um, kes / yapıştır ve sürükle / bırak genellikle visual studio çözüm yöneticisinde çalışır .. hatta sadece klasörü yeniden adlandırın veya silin. gerçekten ne yapmaya çalıştığınıza bağlı olarak.
NotMe

Yanıtlar:


124

Basit bir Dosyalarda Değiştir ( Ctrl+ Shift+ H) 'nın işe yarayacağını düşünüyorum; namespace DemoAppile değiştirin namespace MyApp. Bundan sonra, çözümü oluşturun ve bilinmeyen tanımlayıcılar için derleme hatalarını arayın. Tam nitelikli herhangi bir şeyin DemoAppdeğiştirilmesi gerekecek MyApp.


62
Önemli; proje özelliklerinde de varsayılan ad alanını değiştirin; bu, resx gibi şeyler için ad alanını kontrol eder
Marc Gravell

WPF pencerelerini temsil eden birkaç XAML dosyam var, bu yüzden bu benim için çalışmayacak.
Pieter

6
Ayrıca herhangi Değiştir çalışmalıdır usinggelen değişime ifadeleri using DemoAppiçin using Myapp.
swbandit

5
Ayrıca görünümler klasöründeki tüm web.config dosyalarında <add namespace = "OldNameSpace" /> yeniden adlandırın
neo112

@Pieter Tüm uygulama için hepsini değiştirebilmeli, ardından özelliklerde Marc'ın önerdiği şekilde bir güncelleme yapabilmeli, ardından çözümü kapatmalı ve tekrar açmalısınız, aksi takdirde VS'nin bazı otomatik tamamlamayla açıklanamayan davranışları olur.
Eric

153

Dosyalarınızdan birinde ad alanının bildirildiği bir yere gidin. İmleci, değiştirmek istediğiniz ad alanının üzerine getirin ve düğmesine basın F2. Bu, her dosyadaki ad alanını yeniden adlandırmalıdır. En azından bu cevabı test etmek için oluşturduğum küçük demo projemde işe yaradı!

VS sürümünüze bağlı olarak, kısayol da Ctrl- R, Ctrl- olabilir R.


1
nedense benim için çalışmıyor. F2'ye basıyorum ve hiçbir şey olmuyor.
2014

6
@javapowered, ardından kısayol tuşunuz özelleştirildi. Sizinki için VS seçeneklerine bakın. Bugün benimki CTRL-R CTRL-R.
Amy

4
Not: Yine de bu yöntemi tercih etsem de, [anlaşılır bir şekilde] Görünümler / dizininde bulunan görünümlerdeki ve web.config dosyasındaki referansları değiştirmeyi başaramadı. Sadece onları izleyin.
Wiseguy

3
Kısayol tuşu değişikliklerine bağlı olmaması gereken bir sürüm için, ad alanı adına sağ tıklayın ve yeniden adlandır'ı seçin.
Kat

3
Yeni ismin bir .karakter içermesini istiyorsanız maalesef bu işe yaramaz .
Botond Balázs

27

Çözüme sağ tıklayın, özelliklere gidin, "Uygulama" bölümünün altındaki "varsayılan ad alanını" değiştirin.

görüntü açıklamasını buraya girin


3
Mevcut dosyalardaki ad alanını değiştiriyor mu?
Priyesh Kumar

5
Hayır, olmayacak.
Anuja Lamahewa

3

Ctrl+ Shift+ Hgerçek çözüm değil.

Çözümünüzdeki tüm ad alanı tanımlarınızı değiştirmek için Resharper'ı kullanabilirsiniz. Bu daha önce denediğim en iyi yol.

https://www.jetbrains.com/resharper/features/code_refactoring.html


2
resharper tam gaz pahalı masaüstü makine gerektirir
Ivan G'ye

@IvanG. Pekala, birçok ticari proje de tam anlamıyla pahalı geliştiriciler gerektirir, bu nedenle bir makine ve bir R # lisansı, daha büyük bir plan için çok maliyetli değildir;) Bu (veya Adam veya Amy'nin) yönteminin doğru çalışıp çalışmadığını kontrol etmeniz gerekirse , Kod Sorunlarını Bul
bölümüne

1
@StuartLC maalesef özel bir işyeri ve büyük masaüstü günleri geride kaldı, geliştirmem için gerçekten güçlü bir dizüstü bilgisayar kullanıyorum ve yeniden paylaşım onu ​​neredeyse öldürüyor, bu yüzden zamana değer veren kimseye tavsiye etmem.
Ivan G.13

Ücretsiz olarak yeniden adlandırmak için kullanabileceğiniz arkadaşlar, biliyorsunuz :-) Kur Ücretsiz deneme sürümünü etkinleştirin, yeniden adlandırın ve isterseniz kaldırın ;-)
Selçuk Ermaya

1

Tüm ad alanı değişikliklerini aldığımdan emin olmak için BareGrep adlı bir araçla klasör yapısını inceledim. Belirli bir dosya yapısındaki dosyalar üzerinde arama yapmanızı sağlayacak ücretsiz bir araçtır.


REGEX ile eşleşen dosya: (.exe) | (.dll) | (.cache) | (.pdb) ardından eşleşmeyi tersine çevirin . diğer ikili dosyaları vb. dışlamak için bu modeli tekrarlayın.
twobob


1

Ad alanını yeniden düzenlemek için ReSharper'ı kullanabilirsiniz. 30 gün ücretsiz deneme verecek. Adapce'yi klasör yapısına göre değiştirecektir.

Adımlar:

1) Yeniden düzenlemek istediğiniz proje / klasör / dosyalara sağ tıklayın.

2) Eğer ReSharper'ı kurduysanız, Refactor-> Adjust Namespace ... seçeneğini göreceksiniz. Bu yüzden buna tıklayın.

görüntü açıklamasını buraya girin

Seçilen tüm dosyaların ad alanlarını otomatik olarak değiştirecektir.


Teşekkürler .. Bunu başardım.
sgowd

0

Her şeyi denedim ama gerçekten işe yarayan bir çözüm buldum. Yeni bir isim alanı adı ile bağımsız bir çözüm yaratır ve böyle devam eder.

  1. Ana formda ad alanı adını bulun -> sağ tıklayın -> Refactor -> Yeniden Adlandır ve yeni bir ad seçin. Tüm kutuları işaretleyin ve Tamam'ı tıklayın.

  2. Çözüm gezgininde çözüm adını yeni bir adla yeniden adlandırın.

  3. Çözüm gezgininde proje adını yeni bir adla yeniden adlandırın.

  4. VS'yi kapatın ve çözüm klasöründeki klasörü (örneğin toplam komutanda) yeni bir adla yeniden adlandırın.

  5. .Sln dosyasında eski adı yeni bir adla yeniden adlandırın.

  6. Eski .suo dosyalarını silin (gizli)

  7. VS'yi başlatın ve projeyi yükleyin

  8. Proje -> özellikler -> Montaj adını ve varsayılan ad alanını yeni bir adla değiştirin.


0

Oldukça geç olduğunu biliyorum ama bundan sonra bunu yapmak isteyenler için umarım bu cevap biraz yardımcı olur. Yüklediyseniz CodeRush Express( ücretsiz sürüm ve 'sahip olunması gereken'), proje çapında ad alanını değiştirmek için basit bir yol sunar. İmlecinizi değiştirmek istediğiniz ad alanına smart tagyerleştirmeniz yeterlidir ve namespacedizenin altında bir (küçük mavi bir kutu) gösterecektir . Seçeneği Ctrl +görmek için o kutuyu tıklayabilir veya tuşlara basabilirsiniz Rename. Bunu seçin ve ardından proje geniş ad alanı için yeni adı yazın, tıklayın Applyve yeni iletişim kutusunda projenizdeki değiştirmesini istediğiniz yerleri seçin ve seçin OK. Bitti! :-)


Tecrübelerime göre CodeRush Express bir 'sahip olunması gereken' (kişisel görüş) değildir. Bunun gibi şeyler için kullanışlıdır.
Maarten

0

Ad alanını değiştirmek istediğimde ve çözüm adını şu şekilde yaptım:
1) ad alanını seçip yeniden adlandırarak değiştirdim ve aynısını çözüm adı için yaptım
2) ampul üzerine tıkladım ve eski ad alanının tüm örneklerini yeniden adlandırdım
3 ) tüm projeleri çözümden kaldırdı
4) görsel stüdyoyu kapattı
5) windows explorer'daki tüm projeleri yeniden adlandırdı
6) görsel stüdyoyu açtı ve tüm projeleri yeniden ekledi
7) özelliklerindeki tüm projelerdeki ad alanlarını yeniden adlandırdı
8) bin klasörünü kaldırdı ( tüm projelerden)
9) projeyi yeniden inşa edin

Bu benim için sorunsuz çalıştı ve projemde kaynak kontrolü de vardı. Bu değişiklikleri uzaktan kumandaya ittikten sonra her şey yolundaydı.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.