1. 程式人生 > >win10 uwp 使用 msbuild 命令列編譯 UWP 程式

win10 uwp 使用 msbuild 命令列編譯 UWP 程式

原文: win10 uwp 使用 msbuild 命令列編譯 UWP 程式

本文告訴大家如何使用 msbuild 命令列編譯一個 UWP 程式

在有一些時候,如使用持續整合的時候就不能通過 VisualStudio 的方式編譯 UWP 程式,需要使用命令列的方式編譯。

嘗試在本地從開始選單開啟開發命令提示符,或者從使用命令列呼叫本機的 VisualStudio 編譯命令列

cmd> "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\LaunchDevCmd.bat"

在 VisualStudio 在 C 盤安裝就可以在 C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\ 找到 LunchDevCmd.bat 檔案

執行之後可以看到下面介面

> "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\Tools\LaunchDevCmd.bat"
**********************************************************************
** Visual Studio 2017 Developer Command Prompt v15.8.5
** Copyright (
c) 2017 Microsoft Corporation ********************************************************************** C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise>

先進入專案所在的資料夾,也就是 sln 或 csproj 檔案所在的資料夾,通過 msbuild 可以編譯 sln 或編譯 csproj 專案,推薦是編譯 sln 的方式

在命令列跳轉碟符,如從原來的C盤到 D 盤可以通過 碟符: 的方式

cmd>
D:

這樣就可以跳轉到 D 盤,在進入指定的資料夾,可以輸入 cd 資料夾 的方式

如果自己輸入很容易就輸入錯誤,推薦輸入 cd 然後在資源管理器開啟資料夾,將位址列的資料夾拖進命令列

在編譯 UWP 之前,很重要的是清理原有的檔案,假如檔案都是通過 git 管理的,當前也不存在沒有被跟蹤的檔案,可以使用下面的程式碼刪除無關的檔案,需要注意的是通過這個方式必須保證證書檔案是被跟蹤的

cmd> git clean -xdf

清理之後可以通過下面的程式碼還原 UWP 專案,還原這一步非常重要

cmd> msbuild /t:restore

但是預設歡迎的 ARM 的專案,很多時候需要的是 x86 的專案,可以通過下面的方式還原

cmd> msbuild /t:restore /p:Platform=x86

如果要還原x64的程式,可以使用下面程式碼

cmd> msbuild /t:restore /p:Platform=x64

現在就可以進行編譯了,通過下面的程式碼進行編譯

cmd> msbuild /p:Platform=x86

現在就可以編譯 DEBUG 下的 x86 程式了

如果需要編譯同時輸出,可以嘗試下面的程式碼。下面的 AppxPackageDir 是填寫 AppxPackageDir 的資料夾路徑,請將這個值修改為自己需要的。

/p:AppxBundlePlatforms="x86|x64|ARM" /p:AppxPackageDir="D:\lindexi\AppxPackages\\" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:platform="x86" /p:configuration="release" /p:VisualStudioVersion="15.0" 

如果需要輸出可以上傳的包,需要先在本地連結到應用商店,然後執行下面程式碼

msbuild /t:restore /t:Publish /p:Configuration=Release /p:AppxPackageDir="D:\lindexi\AppxPackages\\" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:AppxBundlePlatforms="x86|x64|arm"

如果是需要編譯其他的解決方案,也就是當前的工作資料夾不在指定的專案資料夾,可以在 msbuild 後面新增解決方案的路徑。注意這個路徑需要使用 csproj 檔案

msbuild "D:\lindexi\UWP\Foo.csproj" /t:restore /t:Publish /p:Configuration=Release /p:AppxPackageDir="D:\lindexi\AppxPackages\\" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:AppxBundlePlatforms="x86|x64|arm"

如果是在伺服器端編譯,推薦先清理一下,然後再重新編譯

清理的命令,請注意,如果需要帶路徑,對於清理命令需要加上 sln 檔案

msbuild  /t:clean

// 帶路徑
msbuild "E:\lindexi\UWP\Foo.sln" /t:clean

還原 Nuget 包

msbuild /t:restore 

// 帶路徑
msbuild "E:\lindexi\UWP\Foo.sln" /t:restore

重新編譯

msbuild "D:\lindexi\UWP\Foo.csproj" /t:rebuild /t:Publish /p:Configuration=Release /p:AppxPackageDir="D:\lindexi\AppxPackages\\" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:AppxBundlePlatforms="x86|x64|arm"

例如在整合工具使用,實際大多數的整合工具預設都有配置 UWP 的編譯,具體請看 win10 uwp 使用 Azure DevOps 自動構建 - lindexi - CSDN部落格 win10 uwp 使用 AppCenter 自動構建 - lindexi - CSDN部落格

在整合工具需要自己寫編譯的流程的時候,推薦下面的步驟

  1. git clean -xdf 保證清理
  2. msbuild /t:clean 如果有了 git 的清理,實際也就不需要使用 msbuild 的清理,只是防止有逗比上傳了 obj 資料夾
  3. msbuild /t:restore 歡迎 nuget 包,注意新增自己的 nuget 網站,如果自己用了內部的 nuget 就需要自己新增
  4. msbuild /t:rebuild /t:Publish /p:Configuration=Release /p:AppxPackageDir="D:\lindexi\AppxPackages\\" /p:AppxBundle=Always /p:UapAppxPackageBuildMode=StoreUpload /p:AppxBundlePlatforms="x86|x64|arm" 建立可以上傳的檔案,注意需要先連結應用商店,然後再將程式碼上傳到 git 才可以創建出可以發到應用商店的檔案。這時使用本地的測試證書也可以
  5. git clean 再次清理檔案,如果自己的 AppxPackageDir 資料夾在工程所在的資料夾,這時就不要使用 git clean 了

知識共享許可協議
本作品採用知識共享署名-非商業性使用-相同方式共享 4.0 國際許可協議進行許可。歡迎轉載、使用、重新發布,但務必保留文章署名林德熙(包含連結:http://blog.csdn.net/lindexi_gd ),不得用於商業目的,基於本文修改後的作品務必以相同的許可釋出。如有任何疑問,請與我聯絡