问题描述
在自己的程序中使用了myName.System.UI名字空间,竟然在这个名字空间下,VS2005自动屏蔽System名字空间。在很多自动生成的代码里System.Form,System.Drawing,System.Console都不能直接使用。其实就是在不同层次下出现重名的namespace问题。在不改变自定义名字空间的前提下,请教谁有简单的办法解决这个问题。
解决方案
解决方案二:
try->usingSystem;usingSystem.Windows;//....usingmySys=myName.System;usingmySysUI=myName.System.UI;//然后自己的使用mySys.MyClazzclz=new..mySysUI.AnyClazzclz=new...
解决方案三:
谢谢晓风残月。这个情况下用别名不是很有效。看下面一个例子:usingSystem.Collections.Generic;usingSystem.Text;namespaceErrorTest.System.Test{classProgram{staticvoidMain(string[]args){System.Console.WriteLine("Hello!");//***}}}//***所注释的位置System被默认为ErrorTest.System,如果前面usingSystem,此处改为Console.WriteLine("Hello!");则通过。问题在于,有很多VS自动生成的代码是自动使用完整的名字空间,比如在生成UI控件的时候往往会使用System.Windows.Form等。而且每次保存操作后都会自动重新生成,开发时每次保存完都手工更改工作量比较大,也容易出现错误。
解决方案四:
你真的尝试过?当你用using导入别名的时候usingmySys=myName.System;usingmySysUI=myName.System.UI;编译器只认mySys的存在,并不会去认myName.System,也就是说myName.System对于编译器来说,是透明的。因此,假如编译器碰到System的时候,它是根据usingSystem;这句来寻找类型的我的项目就是这样的解决的,假如你的场景真的不行,那我得再严格测试以下了...
解决方案五:
嗯,仔细研究下,你是在定义类型的时候,导致命名冲突,而我是在使用类型的时候,用usingalias解决问题,所以,你的情况可能真的存在考虑使用global::看看global::System.Console.WriteLine("HelloWorld");或者仔细查找下VS的选项设置里面,是否可以去掉自动生成完全限定名的
解决方案六:
或者,自己设计【类模板】,默认导入usingSystem;看是否可行
解决方案七:
是的。namespaceErrorTest.System.Test{usinges=ErrorTest.System;classProgram{staticvoidMain(string[]args){System.Console.WriteLine("Hello!");}}}这个例子中无论usinges=ErrorTest.System;写在namespaceErrorTest.System.Test内部或外部,System.Console.WriteLine("Hello!");的System还是被认为是ErrorTest.System。
解决方案八:
谢谢上面的建议。global::和类模板在自己定义的模板中比较好用。现在主要问题是VS自动生成的代码。
解决方案九:
选项里还没有找到。
解决方案十:
1楼正解,改namespace别名