可參考 dotnet-file-app 範例。 完整參考請參見 CLI 參考中的 單檔模式 。
.NET 10 可以在沒有專案檔案的情況下執行單一 .cs 檔案。 本指南說明如何使用 winapp run 以套件身分執行該檔案,讓像 Windows.ApplicationModel.Package.Current、應用程式通知和裝置上的 AI 等 API 都能正常運作。 你不需要自己撰寫清單或圖片素材:Winapp 會幫你產生。
套件身份是 Windows app 模型中的核心概念。 它讓你的應用程式能存取特定的 Windows API,並有乾淨的安裝/卸載體驗,還有更多功能。 使用 dotnet run 執行的檔案型應用程式沒有套件身分。
Prerequisites
.NET SDK 10.0.300 或更新版本:安裝 .NET 10 SDK(安裝後需重新啟動):
winget install Microsoft.DotNet.SDK.10 --source wingetWinapp CLI:透過 Winget 安裝工具
winapp(若已安裝則更新):winget install Microsoft.winappcli --source winget
1. 建立檔案式應用程式
建立一個資料夾,裡面有一個名為 hello.cs 的檔案:
#:property OutputType=Exe
#:property TargetFramework=net10.0-windows10.0.19041.0
using Windows.ApplicationModel;
try
{
Console.WriteLine($"Package Family Name: {Package.Current.Id.FamilyName}");
}
catch (InvalidOperationException)
{
// Thrown when the app doesn't have package identity
Console.WriteLine("Not packaged");
}
這些 #:property 程式碼行會像.csproj一樣設定應用程式。 Windows TargetFramework 讓程式碼能存取 Windows 執行階段 API,例如 Package。
用dotnet run執行:
dotnet run hello.cs
輸出為:Not packaged:應用程式在沒有套件識別的情況下執行。
2. 以套件身份執行
用 Winapp 執行同一個檔案:
winapp run hello.cs
Winapp 會建置應用程式,在建置輸出中產生資訊清單和預設的圖片資產,將應用程式註冊為套件,然後啟動它。 輸出現在會顯示套件識別:
Package Family Name: hello-<hash>_<publisher-hash>
你的來源資料夾仍然只包含 hello.cs。 因為這是主控台應用程式(OutputType=Exe),Winapp 會透過執行別名啟動它,輸出結果會出現在你的終端機中。
註冊在應用程式退出後仍會維持,所以重新執行 winapp run hello.cs 會重複使用相同的身份。 你在 步驟5將其移除。
3. 為你的套件命名
預設情況下,套件名稱是檔案名稱加上檔案路徑的短雜湊值。 要選擇自己的名稱,請先取消註冊目前的套件,因為新名稱會註冊一個新的套件:
winapp unregister hello.cs
接著在 #:property 的頂部加入 hello.cs 指令:
#:property WinAppPackageName=com.contoso.hello
#:property WinAppDisplayName=Contoso Hello
#:property Version=1.0.0
再跑一次:
winapp run hello.cs
輸出顯示新名稱,例如 Package Family Name: com.contoso.hello_<publisher-hash>。 該應用程式也會在開始選單中以 Contoso Hello 的名義出現。
關於每個識別屬性及其預設值,請參見 資訊清單屬性。
4. 使用 dotnet run 執行
要從純版dotnet run獲得相同的封裝啟動,請在hello.cs頂端引用Microsoft.Windows.SDK.BuildTools.WinApp套件:
#:package Microsoft.Windows.SDK.BuildTools.WinApp@*
dotnet run hello.cs
輸出顯示的套件識別與 winapp run 相同。 因為 dotnet run 會建入不同的輸出資料夾,系統會警告它正在替換從不同位置安裝的現有登錄項目。 這是預期中的,你可以忽略它。
套件還給應用程式一個佔位視窗圖示,讓有視窗的應用程式在標題欄顯示圖示。 要使用你自己的檔案,請將 ApplicationIcon 指向一個 .ico 檔案:
#:property ApplicationIcon=Assets\MyApp.ico
關於控制此啟動的屬性,請參見「使用...執行」。dotnet run
5. 清理
透過將 .cs 檔案傳給 winapp unregister 來移除註冊:
winapp unregister hello.cs
新增功能或自訂資訊清單
有些 API 需要已宣告的功能。 例如,Windows AI API 需要systemAIModels:
#:property WinAppCapabilities=systemAIModels
Winapp 會將每個能力寫入正確的 manifest 元素中。 完整列表與命名規則請參閱Capabilities。
協定處理常式、檔案關聯及其他 shell 整合需要已撰寫的資訊清單。 只要在 hello.cs 旁邊放一個 hello.appxmanifest,winapp 就會使用它,而不是產生一個。 請參見 自備資訊清單。
後續步驟
-
用於發佈的套件:
winapp run僅註冊應用程式以供開發使用。 要製作可供發佈的 MSIX,請將程式碼移入專案,並依照 .NET 指南中的使用 MSIX 封裝操作。 - 探索Windows API:透過套件身份,你現在可以使用Notifications、on-device AI,以及其他依賴 身份相關的 API