首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> .NET 網頁程式設計 >> ASP.NET 基礎 >> ASP.NET 基礎

C# 類別庫編譯為 DLL 並供 ASP.NET 專案參考呼叫完整流程

     編輯:ASP.NET 基礎

將共用商業邏輯、資料存取、工具類別封裝為獨立 DLL (Class Library),可跨專案重用、版本管理、單元測試。本文涵蓋命令列編譯、Visual Studio 專案建立、版本控制、NuGet 封裝、ASP.NET 專案參考與執行階段載入機制。

方法一:命令列編譯 (csc.exe) — 理解底層原理

# 1. 準備原始碼 MyMath.cs
namespace MyLib { public class MathUtil { public static int Add(int a, int b) => a + b; } }

# 2. 編譯為 DLL (需在 Developer Command Prompt)
csc /target:library /out:MyLib.dll MyMath.cs

# 3. 多檔案編譯
csc /target:library /out:MyLib.dll MyMath.cs StringUtil.cs DataHelper.cs

# 4. 參考其他組件編譯
csc /target:library /out:MyLib.dll /r:System.Data.dll /r:Newtonsoft.Json.dll MyMath.cs

方法二:Visual Studio 建立 Class Library 專案 (標準流程)

  1. 檔案 → 新增專案 → 類別庫 → 專案名 MyLib。
  2. 撰寫類別,建置 (Build) → `bin\Debug\MyLib.dll` 產出。
  3. ASP.NET 專案右鍵「加入參考」 → 專案 → 勾選 MyLib (專案參考) 或「瀏覽」選取 DLL (檔案參考)。
  4. 專案參考優點:自動處理建置順序、Debug 可直接進入庫原始碼、重構同步更新。

版本控制與強名稱簽署



[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.2024.0115")]
[assembly: AssemblyInformationalVersion("1.0.0-beta.1")]
  • AssemblyVersion:執行階段繫結用,修改會導致參考專案需重新編譯/重新導向。
  • AssemblyFileVersion:檔案屬性顯示用,不影響繫結。
  • 強名稱:防止 DLL 劫持、支援 GAC 部署、允許同名不同版本共存。

NuGet 封裝與私有來源發布

# 1. 建立 .nuspec 或使用 SDK 風格專案 (PackageReference)
# 2. 打包
dotnet pack MyLib.csproj -c Release -o ./nupkgs

# 3. 發布至私有 NuGet Server (Azure Artifacts, MyGet, 本地資料夾)
nuget push MyLib.1.0.0.nupkg -Source https://my-nuget-server/ -ApiKey xxx

# 4. ASP.NET 專案安裝
Install-Package MyLib -Source MyPrivateSource

ASP.NET 執行階段 DLL 載入機制

階段行為
建置參考 DLL 複製至 ASP.NET 專案 `bin/` (專案參考自動,檔案參考需設定 Copy Local=True)
啟動ASP.NET 掃描 `bin/` 所有 DLL 載入 AppDomain
JIT 編譯首次呼叫方法時即時編譯 IL 為機器碼
版本重導向Web.config `` 設定 `dependentAssembly` `bindingRedirect` 解決版本衝突

Web.config 組件繫結重導向範例


  
    
      
      
    
  

常見問題與解決

錯誤原因解決
找不到檔案 'MyLib.dll'Copy Local=False、輸出路徑錯誤、建置順序專案參考自動處理;檔案參考設定 Copy Local=True
無法載入檔案或組件 'xxx, Version=1.0.0.0'版本不符、缺少重導向、GAC 衝突加入 bindingRedirect、確認 bin/ 實際 DLL 版本
方法簽章不符DLL 與參考專案版本不同步重新建置參考專案、清除 bin/obj、避免直接替換 DLL
偵錯無法進入 DLL 原始碼無 PDB、優化編譯、非專案參考使用專案參考、確認 PDB 複製至 bin/、Debug 模式建置

最佳實踐總結

  1. 共用程式碼**務必建立獨立 Class Library 專案**,勿直接複製 .cs 檔。
  2. 使用**專案參考**而非檔案參考,享受建置自動化與偵錯支援。
  3. 啟用**強名稱簽署**,正式版本發布前遞增 AssemblyVersion。
  4. 內部套件透過**私有 NuGet 來源**管理版本相依,避免 DLL 地獄。
  5. Web.config 設定 **bindingRedirect** 解決傳遞相依版本衝突。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved