【发布时间】:2011-11-25 17:29:19
【问题描述】:
我在使用 MSBuild 命令行编译 VB .NET 项目时遇到错误。从 devenv 运行非常好:
error BC30518: Overload resolution failed because no accessible 'Invoke' can be called with these arguments:
有问题的行:
Windows.Application.Current.Dispatcher.Invoke(Sub() InteractionManager.Current.DisplayException((DirectCast(e.ExceptionObject, Exception))))
当 DevEnv/Visual Studio 不是时,为什么 MSBuild 对此犹豫不决?为什么这是一个问题呢?对我来说它看起来不错......我觉得这行唯一有趣的是 Invoke 需要一个 Delegate 类对象(不是强类型委托)......所以在 C# 中,我将无法使用 lambda我现在在 VB .NET 中的表达式(我需要做一些类似 new Action(() => ...)
【问题讨论】:
-
通常情况下,将错误记录设置为详细,然后查看实际调用的命令行等是什么。可能会发现您没有调用您认为的版本的 VB 编译器,或者其他什么。
-
按预期运行 c:\WINDOWS\Microsoft.NET\Framework\v4.0.30319\Vbc.exe
-
我还注意到,当通过 MSBuild 调用 sln 时,我的很多项目现在都在请求 WindowsBase 和 PresentationCore 引用……但在 devenv 下运行时却没有。添加引用似乎已经解决了这个莫名其妙的问题......
-
您也可以尝试在 VS 中调高详细程度 (
Tools | Options | Project and Solutions | Build and Run) 并将 VS 正在执行的vbc命令行与 MSBuild 正在运行的命令行进行比较。从另一个角度来看,您可以进入命令行并在出现问题的最小程序上自己调用vbc。构建问题总是很难调试! -
是的...我打算尝试从我们的 TFS 团队构建中的 devenv 迁移到 msbuild,但似乎 msbuild 无法胜任在生产构建环境中使用的任务。回到 devenv 我认为,直到有一天 msbuild 成为一个成熟的完全成熟的解决方案。
标签: .net vb.net visual-studio msbuild