動態建立實例
`CreateInstance(code, typeName)` / `CreateInstanceFromFile(file, typeName)`:依型別名稱(完整名稱或介面名)自動尋找並實例化第一個符合類別。
關鍵約束:`MarshalByRefObject`
[Serializable]
public class HelloWorld : MarshalByRefObject, IHelloWorld
{
public string Say() => "Hi";
}
- **必須繼承 `MarshalByRefObject`**,否則主域持有序列化複本引用,子域卸載後記憶體無法釋放(洩漏)。
- 介面 `IHelloWorld` 定義於共用組件,主域與子域雙向參考。
動態程式碼偵錯三步驟
- 編譯生成偵錯資訊:`CompilerParameters.IncludeDebugInformation = true`。
- 原始碼映射:
- 檔案編譯:`.pdb` 自動記錄原始碼路徑,支援偵錯。
- 記憶體編譯:未找到指定原始碼路徑的 API,**目前僅支援檔案編譯偵錯**。
- 設定中斷點:程式碼中插入 `System.Diagnostics.Debugger.Break()`,或 Visual Studio 附加至進程下斷點。
偵錯效果示意

動態編譯的程式碼現可在 Visual Studio 中單步偵錯、檢視變數、呼叫堆疊。