【问题标题】:MSBuild Compilation Error WeirdnessMSBuild 编译错误怪异
【发布时间】: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


【解决方案1】:

我相信您正在混合 .NET 版本。

System.Windows.Threading.Dispatcher 具有 .NET 4.5 中 Invoke 方法的单个参数重载。在 .NET 4.0 或更早版本中,所有可用的重载都采用两个或多个参数,这些参数随后排除并提供您看到的错误消息。

因此,我假设您正在执行的 devenv 是 VS2012 测试版,而 msbuild 是更传统的。

您应该能够通过调整 Path 环境变量来解决差异。

【讨论】:

  • @JeffN825 - 仔细查看您的 Imports 指令。如果您(非常)确定 .NET 4.5 没有安装在您机器上的任何位置,那么单参数 Invoke 是一种扩展方法,您需要弄清楚是哪些代码将其贡献到此上下文中。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-01-22
  • 2016-01-23
  • 2010-10-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多