添加由多部分命名空间引起的服务引用后,Reference.cs中的编译错误

Sim*_*ham 12 .net c# wcf visual-studio-2010 service-reference

在将第一个"服务引用"添加到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编译器就会运行并将系统命名空间引用识别为.net的System命名空间的解除.

我现在正在使用不同的解决方法,因为我真的想保留我的多部分命名空间.我目前的替代方法是global::在System命名空间引用之前附加,以强制编译器做正确的事情.实际上,如果"添加服务引用"向导使用T4模板,我可能只是修改那些以在源头嵌入我的变通方法.

问题

我真的很想了解这里发生了什么以及多部分命名空间导致此问题的原因.据推测,命名空间比我想象的更多.其次,我希望找到一个更好的解决方案,而不是每次添加服务引用或使用某些T4模板时执行全局查找/替换.

Flo*_*ory 26

我发现这里的答案有点不清楚,所以我想我会把它作为一个例子添加(我会在评论中这样做,但在这里看起来更好):

所以我把它作为我的默认命名空间:

namespace RelatedData.Loader
Run Code Online (Sandbox Code Playgroud)

但我还添加了一个名为的类:

 public class RelatedData
{
}
Run Code Online (Sandbox Code Playgroud)

因为类名称在使用"添加服务引用"生成代理时与命名空间的一部分匹配,所以会混淆.

这里的答案是重命名我的课程:

 public class RelatedDataItem
Run Code Online (Sandbox Code Playgroud)


Sim*_*ham 16

啊,我最终找到了原因.

我正在攻击一个非常大的第三方WCF API,并且......其中一个命名空间是LameCompany.System(!!)Carnage然后随之而来......

Arrrgghhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh

这里要学习的教训是,当Visual Studio/.net编译器停止识别BCL的System命名空间时,您在项目中有一个命名空间/类型System.找到它,删除它,拍摄创建它的开发人员.

  • "总是编码,好像最终维护你的代码的人是一个知道你住在哪里的暴力精神病患者." 你现在是这个等式中的第二个人.祝你好运,高贵的先生. (6认同)

jab*_*ong 8

我发现有一个类似于你的命名空间的类名会导致这种情况.

尝试重命名您的班级名称