我遇到了由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重命名爲其他內容只是太多工作。
我在VS 2010中遇到了這個問題! – 2012-03-15 15:50:40