无法在 Mono 中编译 svcutil 生成的 C#

Posted

技术标签:

【中文标题】无法在 Mono 中编译 svcutil 生成的 C#【英文标题】:Cannot compile svcutil-generated C# in Mono 【发布时间】:2013-11-06 16:33:56 【问题描述】:

我要解决的根本问题是为什么我尝试使用的任何 WSDL 解析器(Perl、Python 或 Node.js)都不能为我尝试与之通信的这个 SOAP 服务生成存根。该服务(用 .NET 编写)表示使用 svcutil.exe 生成将成为代理客户端的 C# 代码。只有一个问题。

我根本不懂 C#。一点也没有。

所以,我创建了一个 Windows VM(ievms 来救援!),安装 .NET4.0 框架,并生成一个 proxy.cs(6000 行!!)和一个 proxy.config 文件(救援 XML ??)。我将这些文件复制到我的 Ubuntu 主机,安装 mono-complete,然后尝试“gcms proxy.cs”。立即,我得到以下信息(大约 100 次,不同的行号):

proxy.cs(4602,9): error CS0234: The type or namespace name `ServiceModel' does not exist in the namespace `System'. Are you missing an assembly reference?

我完全不知道我在做什么。我要做的就是准确地追踪在各种情况下发送和接收的 XML,以便我可以用普通语言复制它。欢迎任何和所有建议。如果可能的话,我宁愿留在 Linux 上,这样我就不会与 SOAP 服务我的操作系统作斗争。

【问题讨论】:

你有对 System.ServiceModel 程序集的引用吗? 另外,说说你对 C# 不是“普通”语言的看法,但我敢打赌 .NET/WCF 库正确地遵循 SOAP 规范。根据我的经验,对于 SOAPy 和其他 Python 库来说,情况并非如此。我不能对 Mono 说得那么强烈,但我在这方面有很好的经验。 【参考方案1】:

您使用错误的命令行参数来编译生成的文件,难怪它会失败。

http://linux.die.net/man/1/mcs

-r 必须用于告诉编译器哪些程序集必须用作引用。

由于您没有 C# 编程经验,您可能会发现很难正确使用命令行。我建议你先在 Windows 和 Visual Studio 上了解它,然后再转向 Mono 和 MonoDevelop。通过创建 C# 项目 (.csproj) 可以更轻松地编译某些内容,因为 MSBuild 和 xbuild 将负责调用编译器。

你不能跳得太远。

【讨论】:

这正是我需要的指针。答案被接受并赞成。

以上是关于无法在 Mono 中编译 svcutil 生成的 C#的主要内容,如果未能解决你的问题,请参考以下文章

svcutil 无法为自托管 wcf 服务生成接口

无法编译生成的注册码 - MT4109

svcutil.exe 未为 minOccurs=0 生成指定字段

在 SvcUtil 和 WSDL 代码生成期间抓取 KnownType 属性

svcutil 不生成配置文件

WCF 服务 + SvcUtil 生成意外的对象结构