【Win 10 應用開發】RTM版的UAP項目解剖


Windows 10 發布后,其實SDK也偷偷地在VS的自定義安裝列表中出現了,今天開發人員中心也更新了下載。正式版的SDK在API結構上和以前預覽的時候是一樣的,只是版本變成10240罷了,所以大家不要問老周有什么新的API。

API雖然沒變,但VS中的應用程序項目是有了新變化。畢竟以前都是預覽的,而現在是“正規軍”,以前練兵時都用土豆槍,現在都是真刀真槍干了,故而應用程序項目是有變化的。

以前老周跟大家講的修改項目模板,去掉遙測類庫的方法僅僅是針對預覽版的,現在我們無須這么做,在新建項目時,你可以在新建對話框中選擇是否需要遙測。如下圖。

 

如果我在創建項目時沒有啟用遙測,而項目已經創建了,后來我又想添加遙測怎么辦呢。很Easy,只要在項目名稱上右擊鼠標,選擇“添加Application Insights 遙測...”菜單即可。

 

下面再看應用程序項目的另一個重點——引用。

有人會問,引用有啥好看的,玩.net的人誰不知道。別急,這次的UAP項目的引用方式比較有趣。先看截圖。

有沒有注意到什么不同了嗎? 首先,肯定少不了Universal Windows這個通用API集合,這個和以前是一樣的,我記得曾經給大家介紹過Win 10 API集合是通過API協定來歸檔的,還記得吧?不記得就算了,不影響你寫代碼。

除了UWP平台提供的UAP - API,我們知道還有一個.NET的類庫集,不過大家注意名字,現在不是叫.NET for Windows Store App了,現在叫.NET Core for Universal windows platform。有人要問了,有區別嗎,不是改了個名字而已。當然沒那么簡單,這個新的.NET Core版本號是5.0,以前是4.5。當然這不是關鍵,關鍵是有.net類型以前不可以用,但現在可以用了。比如這個:System.IO.IsolatedStorage。

當然絕大多數都一樣,但Windows App是強制編譯為本地代碼的,估計這個新的core是出於這個用途吧。反正不影響我們寫代碼。

 

但是,我要說的,是讓大家仔細觀察上面的截圖,有沒有發現Microsoft.NETCore.UniversalWindowsPlatform這個引用的圖標比較另類?它的圖標和其他的引用不同。

如果你現在雙擊它,是不能在對象瀏覽器中查看的。

 

但你可以在對象瀏覽器中選擇“.NET for Windows Universal”來查看。

 

 

為什么那個家伙那么有個性呢,圖標要與眾不同呢? 你有沒有發現項目里面有個叫project.json的文件,是JSON格式的,打開它之后,你會有驚喜。

{
  "dependencies": {
    "Microsoft.NETCore.UniversalWindowsPlatform": "5.0.0"
  },
  "frameworks": {
    "uap10.0": {}
  },
  "runtimes": {
    "win10-arm": {},
    "win10-arm-aot": {},
    "win10-x86": {},
    "win10-x86-aot": {},
    "win10-x64": {},
    "win10-x64-aot": {}
  }
}

 

看到上面內容,你明白為什么.net for UWP的引用圖標另類了吧。這不是明擺着嗎,這個引用是通過這個JSON文件來配置的。

 

再細心看看,你還會發現,這個project.json文件的生成操作為none,不復制。

 

意思是說,這家伙是可有可無的了,於是,我們把這個project.json從項目中排除,注意是排除,不是刪除,不要急着刪,不然你會后悔的。

 

排除這個JSON文件后,你再生成一下項目,成功,沒有報錯。

 

接下來,你到項目所在的文件夾下,把那個project.json文件刪除(還有一個project.lock.json也刪除),只要放進回收站就可以了,切記!

然后,再重新生成一下項目,這時候,你會發現大禍臨頭了。

 

由此可以看到,.NET for UWP的引用是通過這個JSON文件來描述的,但這個文件不一定要包括中項目中,只要它位於項目的目錄下就可以了。

 

經過我后續實驗發現:

1、project.json和project.lock.json同時存在時,編譯正常。

2、project.json刪除,project.lock.json存在時,編譯正常。

3、project.json存在,project.lock.json存在時,編譯正常。

4、只要project.json存在即可以成功編譯,會自動生成project.lock.json文件。

5、如果project.json和project.lock.json都不存在,編譯出錯。並且在項目的引用列表中不見了.NET for UWP。

 

至於這個project.json的具體作用,還是等官方參考文檔完善了才知道。但從上面的測試來看,這個JSON應該是用來描述.net for UWP的引用的。

 

當然了,我們實際開發中,可以不必理會這個文件,照舊寫代碼就OK了。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM