VS2010 MFC 專案屬性中有兩處可引用 DLL:Framework and References** (Common Properties) 與 **Additional Dependencies** (Linker → Input)。兩者用途、適用場景截然不同。
核心差異對照
| 屬性頁 | 完整路徑 | 作用對象 | 適用場景 | 機制 |
| Framework and References | Common Properties → Framework and References | .NET 組件 / WinMD / 同方案專案輸出 | **同方案內 C++/CLI、C#、VB.NET 專案** 相互引用 | 建立專案間建構相依性,自動複製輸出至輸出目錄 |
| Additional Dependencies | Linker → Input → Additional Dependencies | 原生 .lib 匯入庫 / 靜態庫 | **第三方原生 C++ 庫**、舊版 DLL 配套 .lib、系統庫 | 連結器解析外部符號,需 .lib 檔案,DLL 需放在運行路徑 |
詳細說明
Framework and References (新式、托管友善)
- 專為 **C++/CLI 混合模式** 專案設計,支援引用 .NET 組件 (`.dll`)、Windows Runtime 元件 (`.winmd`)。
- 加入同方案專案引用時,自動建立 **專案相依性** (Build Order),確保被引用專案先建構。
- 建構時自動將引用組件複製至 `$(OutDir)`,執行期可直接載入。
- 不適用 於純原生 C++ 靜態庫 (`.lib`) 引用。
Additional Dependencies (傳統、原生連結器)
- 告訴連結器 (link.exe) 需要解析的 **匯入庫 `.lib`** 檔案名稱 (如 `mylib.lib`)。
- 需在 Linker → General → Additional Library Directories 加入 `.lib` 所在目錄。
- 對應的 `.dll` 執行期必須在:應用程式目錄、系統目錄、PATH 環境變數目錄中。
- 適用於**所有原生 C++ 專案** (MFC、Win32、Static Library、DLL)。
實務選擇指南
- 同方案 C++/CLI 專案互引 → Framework and References** 加入專案引用。
- 引用 C#/VB.NET 組件 → Framework and References** 加入組件引用 (瀏覽 .dll)。
- 引用第三方原生 C++ 庫 (如 OpenCV, Boost, 自製靜態庫) → Additional Dependencies** 加入 `.lib`,目錄加入 Library Directories。
- 引用系統庫 (kernel32.lib, user32.lib 等) → 通常預設已包含,若需顯式加入用 Additional Dependencies。
常見誤區
「Additional Dependencies 直接加 .dll」——錯誤。連結器需要 `.lib` (匯入庫) 解析符號,`.dll` 只在執行期載入。
掌握兩者分工:Framework and References 管建構相依與托管組件部署,Additional Dependencies 管原生符號解析,即可避免「找不到符號」或「執行期找不到 DLL」雙重坑。