[UWP] UWP project 使用 PackageReference

  • 433
  • 0
  • 2017-05-09

VisaulStudio 2017 推出了新的 PackageReference 的 tag,把 NuGet 整合進 MSBuild 的流程,那 UWP 可以使用嗎?

答案當然是可以的!不過... 目前看起來沒有自動的方式,只有手動的方式,雖然不難,但是有點麻煩
1. 先把 project.json 內容複製一份出來留著等等用
2. 刪除 project.json, project.lock.json, $YourProject.nuget.targets
3. 編輯你的 project 內容,並且加上格式如下
 

<PropertyGroup>
    <RestoreProjectStyle>PackageReference</RestoreProjectStyle>
</PropertyGroup>
<ItemGroup>
  <PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform" Version="5.3.1" />
</ItemGroup>

4. 搞定

好處是這樣在放到 Jenkins 後應該可以少做一些事情,例如現在還要下命令讓 NuGet 去 restore project.json 的內容,如果改成在 project file 的話應該就不用多執行這個 script
壞處是目前 PackageReference 沒有 Intellisense,所以如果直接編輯的話,它不會提示你有啥 package 以及有啥 版本 可以用,不過... 反正我們也是用 UI 居多... 所以這倒是還好

不過 UWP project 目前不知道有沒有支援新的 project 檔案格式,就是預設會把 project 下所有的檔案都 include 在專案中的格式,這樣 project 檔案的內容預設就會非常乾淨了,
不過這點就之後想到再嘗試看看嚕~


2017/05/09 更新:

自己把自己的 solution 調整的時候發現了有趣的東西(我已經把 VS2017 的預設 NuGet format 換成 PackageReference)
1. UWP App 透過 project reference 到 UWP class library 的時候一定要全部都換成新的格式才 build 的過
2. 產生一個新的 UWP class library 的時候,發現它加入的 XML 格式不太一樣,他的 Version 是放在  XML 的 child element,但 compile 都可以吃...所以...真的是一個規則各自表述 XD
 

<ItemGroup>
  <PackageReference Include="Microsoft.NETCore.UniversalWindowsPlatform">
    <Version>5.3.3</Version>
  </PackageReference>
</ItemGroup>

3. 承上,除了格式不太一樣外,還發現他多了一個宣告,就是 RestoreStyle 那段,我把它更新在我原先的格式裡面了