35

我试图使用 svcutil.exe 为服务生成代理类,但是当我使用该/reference选项来引用为 .NET 4.0 构建的程序集时,出现错误。

无法加载文件或程序集 [...] 或其依赖项之一。此程序集由比当前加载的运行时更新的运行时构建,无法加载。

所以看来我使用的是旧版本的 svcutil.exe。我正在使用"C:\Program Files\Microsoft SDKs\Windows\v7.0A我能找到的最新版本。我应该在某个地方使用更高版本吗?

4

7 回答 7

59

我遇到过同样的问题。如果您的项目设置为使用.NET 4.0 Framework,则必须选择正确版本的SvcUtil.exe,否则会抛出错误:“Could not load...”

  • 如果您查看“Microsoft SDKs\Windows\v6.0A\Bin”,您会看到该 exe 的版本是“3.0.4506.2152”。
  • “Microsoft SDKs\Windows\v7.0A\Bin”中的 SvcUtil.exe 版本完全相同,所以它也让我陷入了循环。

但是,在“Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 Tools”中还有另一个版本的 SvcUtil.exe,它是“4.0.30319.1”版本,如果你使用它,一切都应该工作。

于 2010-07-09T15:27:43.457 回答
7

适用于 .Net 4.0 的 SDK 的最新版本位于

http://msdn.microsoft.com/en-us/windows/bb980924.aspx

位于v7.1/bin中的 svcutil.exe 版本为 3.0.4506.2152。

位于v7.1/bin/NETFX 4.0 Tools中的 svcutil.exe 版本为 4.0.30319.1。

于 2010-10-08T08:44:50.480 回答
0

回答我自己的问题。新版本svcutil可能会随6 月中旬发布Windows SDK v7.1一起提供。

于 2010-05-06T08:34:01.043 回答
0

更新: util 的最新版本不是 v7.0,根据:

Microsoft SDKs\Windows\v7.0A\Bin\NETFX 4.0 工具

安装 Visual Studio 2012 (VS 2012) 后,现在可以使用 SvcUtil.exe v8.0A

“C:\Program Files (x86)\Microsoft SDKs\Windows\v8.0A\bin\NETFX 4.0 Tools\SvcUtil.exe”

您真正想要的是将 WSDL 文件转换为服务客户端的完整定义:

/n:*,MyCompany.Services.Client /out:IServiceInterface.cs ServiceDefinition.wsdl.xml

其中 service definition.wsdl 显然是来自任何旧肥皂端点的 ?wsdl 响应。

小黄人和巨魔记得!现在一切都是异步的,因此请寻找并利用 SVCUtil.exe v8.0 生成的新异步支持

于 2013-08-03T00:13:43.633 回答
0

为什么不重建为 .NET 3.5 来生成类?我怀疑您为其生成类的类型不依赖于任何 .NET 4.0 功能。cs 文件不会关心 DLL 是为哪个版本构建的,因此您可以在 4.0 项目中使用它们就可以了。

于 2010-04-24T23:57:11.537 回答
0

我有同样的问题。

微软表示,您只能将 .Net 4 DLL 与最新版本的 .Net ( http://msdn.microsoft.com/en-us/library/aa347733.aspx ) 随附的新 SvcUtil 一起使用,但该版本似乎成为你上面提到的那个。它根本不会访问 .Net 4 DLL 作为引用。

于 2010-04-28T03:55:11.817 回答
0

根据 .Net 4.0 的此链接,您应该在 C:\Program Files\Microsoft SDKs\Windows\v6.0\Bin 中使用一个。

http://msdn.microsoft.com/en-us/library/aa347733.aspx

看起来有点奇怪,如果 v7.0A 目录中的那个太旧了。

于 2010-04-22T13:22:56.593 回答