2011-09-27 100 views
4

我正在使用MSBuild命令行编译VB.NET项目时出错。从devenv的运行工作完全正常:问题MSBuild编译错误怪异

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)))) 

为什么募资的MSBuild在这个时候devenv的/ Visual Studio是不是?为什么这是一个问题呢?对我来说这看起来很好....我看到有关这一行的唯一有趣的事情是Invoke需要一个委托类对象(不是强类型委托)...所以在C#中,我不能使用lambda表达现在的我在VB .NET(我需要做的是这样的新动作(()=> ...)

+0

通常情况下,将错误日志记录为详细信息并查看实际调用的命令行是什么。可能会发现你没有调用你认为是你的版本的VB编译器,或者其他东西。 – AakashM

+0

正如预期的那样运行c:\ WINDOWS \ Microsoft.NET \ Framework \ v4.0.30319 \ Vbc.exe – Jeff

+0

我也注意到当我通过MSBuild调用sln时,我的很多项目现在都要求提供WindowsBase和PresentationCore引用......但在devenv下运行时不会。添加引用似乎解决了这个莫名其妙的问题,虽然... – Jeff

回答

0

我相信你是混合.NET版本。

System.Windows.Threading.Dispatcher有NET 4.5中的Invoke方法的单重参数超载在.NET 4.0或更早的版本中,所有可用的重载都带有两个或多个参数,然后这些规则出来并给出您看到的错误消息。你ar e执行是VS2012测试版,而msbuild更传统。

您应该可以通过调整Path环境变量来解决这个差异。

+0

不,Visual Studio 2010. – Jeff

+0

@ JeffN825 - 仔细看看你的'Imports'指令。如果你非常确定你的机器上没有安装.NET 4.5,那么单参数Invoke就是一个扩展方法,你需要弄清楚在这种情况下代码的贡献。 –