c# - 构建 vSphere DLL 失败并出现 CS8078 : An expression is too long or complex to compile

标签 c# .net vmware vsphere vmware-sdk

我正在关注此处的文档 Setting Up for Microsoft C# Development在这一步 Building the C# vSphere DLLs我在 Developer Command Prompt 中得到以下信息:

C:\Users\user\Downloads\VMware-vSphereSDK-6.5.0-4571253\SDK\vsphere-ws\dotnet\bin>build.bat
        1 file(s) copied.
Fixing HttpNfcLeaseInfo type, adding missing leaseState property
Generating VimService.cs
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.6.1055.0]
Copyright (c) Microsoft Corporation.  All rights reserved.

Generating files...
C:\Users\user\Downloads\VMware-vSphereSDK-6.5.0-4571253\SDK\vsphere-ws\dotnet\bin\VimService.cs
Compiling original VimService.dll
Microsoft (R) Service Model Metadata Tool
[Microsoft (R) Windows (R) Communication Foundation, Version 4.6.1055.0]
Copyright (c) Microsoft Corporation.  All rights reserved.

Generating XML serializers...
C:\Users\user\Downloads\VMware-vSphereSDK-6.5.0-4571253\SDK\vsphere-ws\dotnet\bin\VimServiceSerializers.cs
        1 file(s) copied.
Optimizing VimService.cs by stripping serializer hint attributes.
Compiling optimized VimService.dll
FAILED

查看 build.bat 似乎在这一行失败了:

echo Compiling optimized VimService.dll
csc /t:library /out:Vim25Service.dll VimService.cs VimServiceSerializers.cs >nul || goto ERROR

如果我手动运行 csc/t:library/out:Vim25Service.dll VimService.cs VimServiceSerializers.cs 我会得到以下信息:

C:\Users\user\Downloads\VMware-vSphereSDK-6.5.0-4571253\SDK\vsphere-ws\dotnet\bin>csc /t:library /out:Vim25Service.dll VimService.cs VimServiceSerializers.cs
Microsoft (R) Visual C# Compiler version 1.3.1.60616
Copyright (C) Microsoft Corporation. All rights reserved.

VimServiceSerializers.cs(32548,98): error CS8078: An expression is too long or complex to compile

我也尝试过使用 VS2017:

C:\Users\user\Downloads\VMware-vSphereSDK-6.5.0-4571253\SDK\vsphere-ws\dotnet\bin>csc /t:library /out:Vim25Service.dll VimService.cs VimServiceSerializers.cs
Microsoft (R) Visual C# Compiler version 2.0.0.61213
Copyright (C) Microsoft Corporation. All rights reserved.

VimServiceSerializers.cs(31372,109): error CS8078: An expression is too long or complex to compile

需要注意的一个行为,在 VimServiceSerializers.cs(#####,##) 上,行和列每次都不同。

谷歌搜索错误 CS8078,发现这是编译器堆栈空间不足的问题。 https://stackoverflow.com/a/8160109/6656422

如何成功编译 VmWare 的代码?

最佳答案

我想通了。序列化程序 CS 文件有很长一段不间断的 if ... else if ... else if ... 子句。编译器必须立即处理整个 if/else 表达式,这会导致堆栈空间不足。

幸运的是,这些 else if 中的每个分支都以 return 语句终止。这使得所有 else if 在功能上等同于独立的 if 语句,它们被独立解析。

在多处进行此替换后,文件即可编译。这是我修改后的 VimServiceSerializers.cs:https://1drv.ms/u/s!Al6mzY0CpY7EnHqBRDyg-z0ctrjk

关于c# - 构建 vSphere DLL 失败并出现 CS8078 : An expression is too long or complex to compile,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41706057/

相关文章:

c# - 使用 P/Invoked GlobalSize 时堆已损坏

c# - Foreach 因编码 COM 接口(interface)而失败

c# - 具有 ASP.NET Core 2.1 和 UWP 应用程序作为客户端的 SignalR Webhost 返回 ' 405 Method not allowed'

c# - 在C#中打开和关闭线程

c# - 如何在 C# 中获取 Windows\system32\config\systemprofile\AppData\Local\folder 路径?

c# - const 字符串是否符合垃圾回收条件?

visual-c++ - 64位Windows VMware检测

ubuntu-16.04 - 如何将Devstack float ip暴露给外界?

console - 如何连接到 vmware ESXi 远程控制台

C# : Interface without Namespace