前言
我們有個專案,它包含 C# 及 VB.NET 程式,因為(原本是 Visual Studio 2008)改使用新的 Visual Studio 2017 開啟來建置,結果出現了 BC30201: 必須有運算式。, BC30035, BC30157, BC30205 等等的錯誤。
研究
錯誤的程式碼如下,
1 | Dim abc = New Button |
但是有另外一台也是相同的環境,使用相同的專案來建置,卻是沒有問題的。
有查到 Unexpected build error in Xaml + Winform Project #15 ,但 Visual Studio 並沒有安裝 “ILSupport” 這個擴充。
後來找到 VB.NET IF() Coalesce and “Expression Expected” Error 這篇,應該是因為 system.codedom 中 compiler 設定的關係,
所以比較可以建置跟不能建置專案的 web.config 是不同的。
可以建置的 web.config 如下,
1 |
|
無法建置的 web.config 如下,
1 |
|
比較了一下,建置錯誤的 compilation 節點並沒有設定 targetFramework ,而且 system.codedom 的 CompilerVersion 則是使用 v3.5 。
所以就請同事從可以建置專案中的 web.config 將 compilation 及 system.codedom 區段蓋到 無法建置專案的 web.config 相同區段即可以正常建置。
因為在不同的版本中,system.codedom 中的 compiler 也會有不同的 DLL 負責,例如 Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider 。
所以就將 system.codedom 區段移除掉,並在 compilation 節點上設定 targetFramework ,也可以順利建置。
解法方式
所以修正的方式有2個,
1.從可以 Work 的 web.config Copy compilation 及 system.codedom 區段蓋到 無法建置專案的 web.config 相同區段。
2.在無法建置專案的 web.config 的compilation 節點上設定 targetFramework,並移除 system.codedom 區段。
方法2的 web.config 如下,
1 |
|
參考資料
VB.NET IF() Coalesce and “Expression Expected” Error
Unexpected build error in Xaml + Winform Project #15