5

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

我有一个名为 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”而不是“全局”来解决这个问题,并在我的代码文件中声明“外部别名 x”,并将“x::”放在前面每个对命名空间 Foobar.System 中的类型和类的引用。代码编译。

但似乎表单设计者没有认识到这一点,并在尝试显示表单时给了我一个错误。同样,这可以通过手动将“global::”放在对 System.Windows.Forms 中的每个类的引用(例如 global::System.Windows.Forms.Button)前面来解决,但每次都有机会形式,代码会自动重新生成,并删除'global::'部分。

所以,问题是:有没有办法让表单设计者知道用于引用我的程序集 Foo.dll 的别名“x”,或者是否有另一种更好的解决方案?将命名空间 Foobar.System 重命名为其他名称实在是太麻烦了。

4

1 回答 1

0

据我所知,没有办法解决这个问题。

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

于 2009-11-26T11:07:45.983 回答