2009-11-26 99 views
5

我遇到了由Visual Studio 2008中的窗體設計器自動生成的衝突命名空間和代碼的問題。我搜索了許多論壇和不同的文檔,但一直未能找到任何解決這個問題的方法。命名空間,別名和Visual Studio窗體設計器

我有一個稱爲Foo.dll與以下命名空間/代碼組件:

namespace Foobar.System 
{ 
    public class MySystemClass() { } 
} 

然後,我有一個包含索姆常用形式另一個組件:

namespace Foobar.MyCommonForms 
{ 
    public class MyForm : System.Windows.Forms.Form 
    { 
     public void SomeMethod() 
     { 
      var systemclass = new Foobar.System.MySystemClass(); 
     } 
    } 
} 

這裏,編譯器顯示以下錯誤:類型或名稱空間「Windows」不是命名空間「Foobar.System」的一部分。顯然,編譯器試圖在命名空間Foobar.System.Windows.Forms中查找類System.Windows.Forms.Form!

我已經能夠通過在引用程序集Foo.dll時使用別名'x'而不是'global'來解決此問題,並在我的代碼文件中聲明'extern alias x',並將'x :: '在名稱空間Foobar.System中的每個類型和類的引用之前。代碼編譯。

但似乎窗體設計師不承認這一點,並試圖顯示窗體時給我一個錯誤。這也可以通過在System.Windows.Forms(例如global :: System.Windows.Forms.Button)中每次引用類的前面手動添加'global ::'來解決,但是每次都有機會表單,代碼會自動重新生成,並且'global ::'部分被刪除。

所以,問題是:是否有辦法讓表單設計人員知道用於引用我的程序集Foo.dll的別名'x',還是有其他更好的解決方案?將命名空間Foobar.System重命名爲其他內容只是太多工作。

+0

我在VS 2010中遇到了這個問題! – 2012-03-15 15:50:40

回答

0

從我所知道的事情來看,沒有辦法解決這個問題。

流行的重構工具,如Resharper或Refactor!都包括全局重命名命名空間的能力。我會認真考慮使用這些。