我遇到了与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重命名为其他东西只是太多工作。
答案 0 :(得分:0)
根据我的判断,我无法解决这个问题。
流行的重构工具,如Resharper或Refactor!两者都包括全局重命名命名空间的能力。我会认真考虑使用它们。