2011-09-27 99 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就是一個擴展方法,你需要弄清楚在這種情況下代碼的貢獻。 –