在 Visual Studio 2010 中将我的第一个“服务引用”添加到客户端项目时,我遇到了这个奇怪的命名空间问题。
如果我的项目的默认命名空间使用两个或更多部分,例如MyCompany.MyApp
,当添加服务引用时,将创建一个 Reference.cs 文件,其中包含MyCompany.MyApp.ServiceReferenceName
具有大量具有完全限定名称的自动生成代码的命名空间,System.SerializableAttribute
例如System.Runtime.Serialization.DataContractAttribute
.
Reference.cs 文件将充满编译错误,因为编译器开始将 System 命名空间视为命名空间的子成员MyCompany.MyApp
。您会遇到很多错误,例如:
The type or namespace name 'Runtime' does not exist in the namespace 'MyCompany.MyApp.System'...
如果我将 Reference.cs 文件顶部的命名空间修改为一些简单的东西,例如MyCompanyMyApp.ServiceRefernceName
,编译器会表现并将 System 命名空间引用识别为 .net 的 System 命名空间的 decleration。
我现在正在使用不同的解决方法,因为我真的想保留我的多部分命名空间。我目前的替代方法是global::
在 System 命名空间引用前面附加以强制编译器做正确的事情。事实上,如果“添加服务引用”向导使用 T4 模板,我可能会修改这些模板以在源代码中嵌入我的解决方法。
问题
我真的很想了解这里发生了什么以及为什么多部分命名空间会导致此问题。大概命名空间比我想象的要多。其次,真的很想制定一个比每次添加服务引用或使用一些 T4 模板时都执行全局查找/替换更好的解决方案。