命名空间,别名和Visual Studio窗体设计器

时间:2009-11-26 11:01:15

标签: c# forms namespaces designer alias

我遇到了与Visual Studio 2008中的表单设计器自动生成的命名空间和代码冲突的问题。我搜索了许多论坛和不同的文档,但是找不到任何解决此问题的方法。

我有一个名为Foo.dll的程序集,其中包含以下命名空间/代码:

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

然后,我有另一个包含som常用形式的程序集:

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重命名为其他东西只是太多工作。

1 个答案:

答案 0 :(得分:0)

根据我的判断,我无法解决这个问题。

流行的重构工具,如Resharper或Refactor!两者都包括全局重命名命名空间的能力。我会认真考虑使用它们。