在這次的專案中,我需要的是背景執行的web services
於是開始了一段○○××的找文件之旅
因為在官方文件中,並沒有看到要如何設定一個Headless類型的專案類型
完整的專案建置過程如下:
首先,在visual studio上建立一個空白的Windows Universal App專案
step 1.
刪除兩個預先產生的.xmal檔案
step 2.
以檢視原始碼的方式打開專案的Package.appxmanifest
修改內容,增加 iot 的namespace宣告
xmlns:iot="http://schemas.microsoft.com/appx/manifest/iot/windows10"
然後在IgnorableNamespaces新增一個iot的項目
IgnorableNamespaces="uap mp iot"
如下圖所示
step 3.
Package.appxmanifest還有一部份要修改
在Applications的node中,刪除Executable和EntryPoint兩個attribute
並且在
AppListEntry="none"
另外還要加入extensions
<Extensions>
<Extension Category="windows.backgroundTasks"
EntryPoint="TestHeadless.StartupTask"> <BackgroundTasks> <iot:Task Type="startup" /> </BackgroundTasks> </Extension></Extensions>
完成後結果如下圖所示
step 4.
加入專案參考 - Windows IoT Extension for the UWP
視專案需求選擇版本,
因為在新增專案時,我選10.0.10586,所以就用新版的囉
step 5. 配合剛才設定檔中的EntryPoint,新增StartupTask.cs
using System;
using System.Diagnostics;
using Windows.ApplicationModel.Background;
using Windows.System.Threading;
namespace TestHeadless
{
public sealed class StartupTask : IBackgroundTask
{
BackgroundTaskDeferral _deferral;
ThreadPoolTimer timer;
public void Run(IBackgroundTaskInstance taskInstance)
{
_deferral = taskInstance.GetDeferral();
}
}
}
到目前為止,如果以為這樣就可以的話,就大錯特錯
如果現在建置專案,你會發現會有Error
告訴你的EntryPoint裡沒有Main function
因此要修改專案的定義檔
step 6.
在專案上點選滑鼠右鍵,選擇「卸載專案」,
然後再點滑鼠右鍵,編輯專案定義檔 .csproj
將OutputType修改為winmdobj
原本內容為AppContainerExe
另外加入以下兩行,
<appxpackage>true</appxpackage>
<containsstartuptask>true</containsstartuptask>
如下圖
重新載入專案後,即完成Headless app的開發設定Reference:how-to-build-a-headless-windows-10-iot-app
沒有留言:
張貼留言