Visual Studio 2010 引入全新 CLR 4.0,打破了 VS 2008「單一 CLR 多框架」的模式,採用「單一編譯器(VB 10 / vbc.exe 4.0)針對多框架」的新架構。本文深入剖析 VS 2010 多目標機制、設計時相容性陷阱、命令列編譯參數、用戶端設定檔與專案互參考策略,助你在 VS 2010 中高效維護跨框架專案。
若專案需在 VS 2008 與 VS 2010 共同維護,嚴禁使用 VB 10 新語法。範例:
' VS 2010 新語法:隱式行續行 + 自動實作屬性
Public Property Name As String
Public Sub New() End Sub
此碼在 VS 2010 目標 .NET 3.5 編譯通過,但在 VS 2008 (vbc.exe 3.5) 編譯失敗。解決方案:
/langversion:9.0 編譯器開關強制檢查語法相容性。專案屬性 →「編譯」→「目標框架」下拉選單切換。預設安裝不含 .NET 3.5 SP1,需手動安裝或從「新增專案」對話框下載。用戶端設定檔為預設(WPF、WinForms、Console),Web 專案與類別庫預設「完整設定檔」。類別庫若僅依賴用戶端組件,可改回用戶端設定檔減少部署體積。
vbc.exe 4.0 無單一「目標框架」開關,需組合使用:
| 開關 | 用途 |
|---|---|
/noconfig | 忽略 vbc.rsp 預設參考/匯入,避免引入 .NET 4.0 組件 |
/sdkpath | 指定 MSCorLib.dll 版本(如 %windir%\Microsoft.NET\Framework\v2.0.50727) |
/reference | 顯式指定目標框架參考組件(%programfiles%\Reference Assemblies\Microsoft\Framework\v3.5) |
/langversion | 限制語法版本(9.0 對應 3.5,10 對應 4.0),Web 專案自動啟用 |
/vbruntime | 指定 Microsoft.VisualBasic.dll 版本(通常配合 /sdkpath) |
範例:目標 .NET 3.5 編譯
vbc.exe /noconfig /sdkpath:C:\Windows\Microsoft.NET\Framework\v2.0.50727 `
/r:"C:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" `
d:\src\test.vb /out:d:\bin\test.exe
範例:目標 .NET 2.0 編譯(移除 3.5 專有參考)
vbc.exe /noconfig /sdkpath:C:\Windows\Microsoft.NET\Framework\v2.0.50727 d:\src\test.vb /out:d:\bin\test.exe
| MSCorLib 版本 | 支援框架 | 設定檔 |
|---|---|---|
| 2.0 | 2.0、3.0、3.5 | 用戶端/完整 |
| 4.0 | 4.0 | 用戶端/完整 |
/link 或「嵌入互操作類型=True」)不支援向下目標,IDE 會自動回退為標準參考(需部署 PIA)。VS 2010 多目標機制雖有設計時相容性限制,但憑藉單一現代化編譯器、豐富語法新特性、靈活的命令列控制,仍是維護跨框架專案的最佳選擇。關鍵在於:明確區分「設計時相容」與「執行時相容」,配合 /langversion、CI 建置驗證、統一開發環境(全團隊 VS 2010),即可安心享受新語法帶來的生產力提升。