早期 .NET 應用部署常面臨「客戶電腦沒裝 Framework、不想裝、不能裝」的困境。主流解決方案有:
ILMerge(僅合併組件)、Costura.Fody(內嵌 DLL)飛信安裝目錄下的 VMDotNet\ 資料夾包含:
FetionVM.exe:自訂載入器mscorlib.dll、System.dll 等核心組件(經修改/裁剪)執行方式:
FetionVM.exe YourApp.exe
載入器會在虛擬環境中初始化 CLR,載入你的組件並執行,完全不依賴系統安裝的 .NET Framework。
VMDotNet 資料夾.exe + 相依 .dll)放入同層或子目錄Launch.bat:
@echo off
VMDotNet\FetionVM.exe MyApp.exe
Launch.bat 即可運行
// Launcher.cs
class Program
{
static void Main(string[] args)
{
string appPath = "MyApp.exe";
if (IsNetFrameworkInstalled(4, 0)) // 檢查註冊表
{
Process.Start(appPath); // 直接運行
}
else
{
Process.Start("VMDotNet\\FetionVM.exe", appPath); // 虛擬環境
}
}
static bool IsNetFrameworkInstalled(int major, int minor)
{
using (var key = Registry.LocalMachine.OpenSubKey($@"SOFTWARE\Microsoft\NET Framework Setup\NDP\v{major}.{minor}"))
{
return key?.GetValue("Install")?.ToString() == "1";
}
}
}
| 限制 | 說明 | |||
|---|---|---|---|---|
| 相容性 | 僅支援 .NET 2.0/3.5 時代組件;.NET 4.0+、.NET Core/.NET 5+ 無法運行 | |||
| 加密/混淆衝突 | 大多數 .NET 保護殼(如 Themida、VMProtect、.NET Reactor)加密後的組件無法在虛擬環境載入 | |||
| 功能缺失 | WPF、WCF、ASP.NET、System.Transactions 等高階功能可能不支援 | |||
| 法律風險 | 飛信 VMDotNet 為騰訊專有元件,商業再發布需確認授權 |
| 方案 | 適用版本 | 體積 | 相容性 | 授權 |
|---|---|---|---|---|
| VMDotNet | 2.0/3.5 | ~15 MB | 中 | 專有 |
| Self-contained .NET Core | 3.1/5.0/6.0/7.0/8.0 | ~60 MB | 高 | MIT |
| Native AOT (.NET 7+) | 7.0/8.0 | ~5-10 MB | 高(有平台限制) | MIT |
| Xenocode/Salamander | 2.0-4.8 | ~20-40 MB | 高 | 商業 |