【发布时间】:2009-11-26 11:01:15
【问题描述】:
我遇到了由 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 重命名为其他名称实在是太麻烦了。
【问题讨论】:
-
我在 VS 2010 中也遇到了这个问题!!
标签: c# forms namespaces designer alias