我正在一个环境中工作,在这个环境中,所有项目都被置于与项目的特定业务领域无关的全球解决方案中。所以解决方案是一个怪物。我习惯于基于关注点分离的更加隔离的方法;但这与问题无关。
此解决方案中的一个项目是用 VB.NET 编写的,并且有一段代码使用#Disable
和指令,如此处#Enable
所述
根据微软的说法,这些指令是有效的,如果我在 Visual Studio 中针对包含这些指令的项目执行特定构建;我得到了一个成功的构建。
但是,该组织需要从命令提示符使用 MSBuild 初步成功构建,以确保它将在构建服务器上构建。我无法得到,因为 MSBuild 报告:
error BC30248: 'If', 'ElseIf', 'Else', 'End If', 'Const', or 'Region' expected.
这是引发错误的实际代码块:
Protected Overrides Function ConvertToString() As IOperand
#Disable Warning BC42322
Return MyValue.ToString()
#Enable Warning BC42322
End Function
我能得出的最好结论是,在执行构建之前必须设置一些 MSBuild 可选标志以适应此情况并防止错误或这些指令已被弃用。虽然不是 100% 肯定是这种情况(如果有的话),但我确实需要让代码在 MSBuild 下成功构建。
如果它们是警告,我可以简单地忽略它们,但事实并非如此。
此外,我已经尝试通过 /p:VisualStudioVersion 开关使用不同的版本。结果都是一样的。