共用方式為


使用 CLI 發佈適用於 Windows 的已封裝 .NET MAUI 應用程式

在散發適用於 Windows 的 .NET 多平臺應用程式 UI (.NET MAUI) 應用程式時,您可以將應用程式及其相依性發佈至部署至另一個系統的資料夾。 您也可以將應用程式封裝成 MSIX 套件,這對安裝應用程式的使用者有許多優點。 如需 MSIX 優點的詳細資訊,請參閱 什麼是 MSIX?

建立簽署憑證

您必須使用簽署憑證來發佈應用程式。 此憑證用來簽署 MSIX 套件。 下列步驟示範如何使用PowerShell建立及安裝自我簽署憑證:

注意

當您建立和使用自我簽署憑證時,只有安裝及信任憑證的使用者才能執行您的應用程式。 這很容易實作進行測試,但它可能會防止其他使用者安裝您的應用程式。 當您準備好發佈應用程式時,建議您使用受信任的來源所簽發的憑證。 這種集中式信任系統有助於確保應用程式生態系統具有驗證層級,以保護使用者免受惡意執行者的攻擊。

  1. 開啟 PowerShell 終端機,並使用您的專案瀏覽至目錄。

  2. New-SelfSignedCertificate使用 命令來產生自我簽署憑證。

    安裝您的應用程式時,系統會 <PublisherName> 向用戶顯示此值、提供您自己的值,並省略 < > 字元。 您可以將 參數設定 FriendlyName 為您想要的任何文字字串。

    New-SelfSignedCertificate -Type Custom `
                              -Subject "CN=<PublisherName>" `
                              -KeyUsage DigitalSignature `
                              -FriendlyName "My temp dev cert" `
                              -CertStoreLocation "Cert:\CurrentUser\My" `
                              -TextExtension @("2.5.29.37={text}1.3.6.1.5.5.7.3.3", "2.5.29.19={text}")
    
  3. 使用下列 PowerShell 命令來查詢所建立憑證的憑證儲存:

    Get-ChildItem "Cert:\CurrentUser\My" | Format-Table Thumbprint, Subject, FriendlyName
    

    您應該會看到類似下列輸出的結果:

    Thumbprint                               Subject                                  FriendlyName
    ----------                               -------                                  ------------
    DE8B962E7BF797CB48CCF66C8BCACE65C6585E2F CN=1f23fa36-2a2f-475e-a69e-3a14fe56ed4
    A6CA34FD0BA6B439787391F51C87B1AD0C9E7FAE CN=someone@microsoft.com
    94D93DBC97D4F7E4364A215F15C6ACFEFC71E569 CN=localhost                             ASP.NET Core HTTPS development certificate
    F14211566DACE867DA0BF9C2F9C47C01E3CF1D9B CN=john
    568027317BE8EE5E6AACDE5079D2DE76EC46EB88 CN=e1f823e2-4674-03d2-aaad-21ab23ad84ae
    DC602EE83C95FEDF280835980E22306067EFCA96 CN=John Smith, OU=MSE, OU=Users, DC=com
    07AD38F3B646F5AAC16F2F2570CAE40F4842BBE0 CN=Contoso                               My temp dev cert
    
  4. 憑證的指紋 稍後將會使用,因此請將它複製到剪貼簿。 它是指紋值,其專案符合憑證的 SubjectFriendlyName

如需詳細資訊,請參閱 建立套件簽署的憑證。

設定專案組建設定

項目檔是放置 Windows 特定組建設定的好位置。 您可能不想將某些設定放入項目檔中,例如密碼。 本節所述的設定可以使用 格式在命令行 -p:name=value 上傳遞。 如果已在專案檔中定義設定,則命令行上傳遞的設定會覆寫項目設定。

將下列 <PropertyGroup> 節點新增至項目檔。 只有在目標架構為 Windows 且組態設定為 Release時,才會處理這個屬性群組。 每當建置或發佈模式時 Release ,就會執行此組態區段。

<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(Configuration)' == 'Release'">
    <AppxPackageSigningEnabled>true</AppxPackageSigningEnabled>
    <PackageCertificateThumbprint>A10612AF095FD8F8255F4C6691D88F79EF2B135E</PackageCertificateThumbprint>
</PropertyGroup>
<PropertyGroup Condition="$([MSBuild]::GetTargetPlatformIdentifier('$(TargetFramework)')) == 'windows' and '$(RuntimeIdentifierOverride)' != ''">
    <RuntimeIdentifier>$(RuntimeIdentifierOverride)</RuntimeIdentifier>
</PropertyGroup>

<PackageCertificateThumbprint> 屬性值取代為您先前產生的憑證指紋。 或者,您可以從項目檔中移除此設定,並在命令行上提供它。 例如: -p:PackageCertificateThumbprint=A10612AF095FD8F8255F4C6691D88F79EF2B135E

範例中的第二 <PropertyGroup> 個需要解決 Windows SDK 中的 Bug。 如需 Bug 的詳細資訊,請參閱 WindowsAppSDK 問題 #3337

發佈

若要發佈您的應用程式,請開啟 VS 2022 終端機的開發人員命令提示字元,並流覽至 .NET MAUI 應用程式項目的資料夾。 dotnet publish執行 命令,並提供下列參數:

參數
-f 目標架構,也就是 net8.0-windows{version}。 此值是 Windows TFM,例如 net8.0-windows10.0.19041.0。 請確定此值與 .csproj 檔案中節點中的<TargetFrameworks>值相同。
-c 組建組態,也就是 Release
-p:RuntimeIdentifierOverride=win10-x64
- 或 -
-p:RuntimeIdentifierOverride=win10-x86
避免 WindowsAppSDK 問題 #3337詳述的錯誤。 -x64根據您的目標平台選擇 參數的 或 -x86 版本。

警告

嘗試發佈 .NET MAUI 解決方案會導致 dotnet publish 命令嘗試個別發佈方案中的每個專案,這可能會導致將其他項目類型新增至方案時發生問題。 因此, dotnet publish 命令的範圍應設定為 .NET MAUI 應用程式專案。

例如:

dotnet publish -f net8.0-windows10.0.19041.0 -c Release -p:RuntimeIdentifierOverride=win10-x64

注意

在 .NET 8 中 dotnet publish ,命令預設為組 Release 態。 因此,您可以從命令行省略組建組態。

發佈組建和封裝應用程式,將已簽署的套件 複製到 bin\Release\net8.0-windows10.0.19041.0\win10-x64\AppPackages\<appname>\ 資料夾。 <appname> 是以您的專案和版本命名的資料夾。 在此資料夾中,有 msix 檔案,也就是應用程式套件。

如需命令的詳細資訊 dotnet publish ,請參閱 dotnet publish

安裝應用程式

若要安裝應用程式,必須使用您已信任的憑證進行簽署。 如果不是,Windows 不會讓您安裝應用程式。 您會看到類似如下的對話框,並停用 [安裝] 按鈕:

Installing an untrusted app.

請注意,在上一個映射中,發行者「未知」。

若要信任應用程式套件的憑證,請執行下列步驟:

  1. 以滑鼠右鍵按兩下 .msix 檔案,然後選擇 [ 屬性]。

  2. 選取 [ 數字簽名] 索引標籤

  3. 選擇憑證,然後按 [詳細數據]。

    Properties pane of an MSIX file with the digital signatures tab selected.

  4. 選取 [ 檢視憑證]。

  5. 選取 [ 安裝憑證...]。

  6. 選擇 [ 本機計算機 ],然後選取 [ 下一步]。

    如果 [用戶帳戶控制 ] 提示您允許此應用程式變更裝置嗎?,請選取 [ ]。

  7. 在 [ 憑證匯入精靈] 視窗中,選取 [將所有憑證放在下列存放區中]。

  8. 選取 [流覽...],然後選擇 [信任 人員 存放區]。 選取確定關閉對話方塊。

    Certificate import wizard window is shown while selecting the Trusted People store.

  9. 選取 [下一步],然後選取 [完成]。 您應該會看到一個對話框,指出: 匯入成功

    Certificate import wizard window with a successful import message.

  10. 在此程式開啟的任何視窗上選取 [ 確定 ],以關閉所有視窗。

現在,請嘗試再次開啟套件檔案以安裝應用程式。 您應該會看到類似下列的對話框,並正確顯示發行者:

Installing a trusted app.

如果您要安裝應用程式,請選取 [ 安裝 ] 按鈕。

目前的限制

下列清單描述發佈和封裝的目前限制:

  • 如果您嘗試直接將可執行檔從 publish 資料夾執行,則已發布的應用程式無法運作。
  • 執行應用程式的方式是先透過封裝 的 MSIX 檔案進行安裝。