やりたいこと
以前、.net frameworkで、UWPのAPIを使うやり方を調べたが、同じことを.NET6でもやりたい。
やり方
.NET6のプロジェクトの対象WIndowsのバージョンを、Windows 10, version 1809にしてやる。
csprojの中の<TargetFramework>
を下記のようにすることで、バージョンを指定できる。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>Exe</OutputType> <TargetFramework>net6.0-windows10.0.17763.0</TargetFramework> <ImplicitUsings>enable</ImplicitUsings> <Nullable>enable</Nullable> </PropertyGroup> </Project>
MS公式ページによると、下記のWindowsバージョンを指定すればUwpのAPIが使える様子。(22/03/16時点)
Windowsバージョン | TargetFrameworkの値 |
---|---|
Windows 10, version 1809 | net5.0-windows10.0.17763.0 |
Windows 10, version 1903 | net5.0-windows10.0.18362.0 |
Windows 10, version 2004 | net5.0-windows10.0.19041.0 |
Windows 11 | net5.0-windows10.0.22000.0 |
サンプル
var appDataPath = string.Empty; try { appDataPath = Windows.Storage.ApplicationData.Current.LocalFolder.Path; Console.WriteLine("■UWP版"); } catch (Exception ex) { Console.WriteLine(ex.Message); appDataPath = Environment.GetFolderPath(Environment.SpecialFolder.ApplicationData); Console.WriteLine("■Desktop版"); } Console.WriteLine(appDataPath);
パッケージプロジェクトから実行
.net6アプリを直接実行
※パッケージせず、.net6アプリから直接実行したときは、UWPのAPIを呼ぼうとしたときには例外が発生する。
ここでは、代わりに.netのAPIで、AppDataのフォルダを取っている。
メモ
この<TargetFramework>
にセットする値のことを、Target Framework Moniker
というらしい。
Moniker
は「あだ名」なので、ターゲットにするフレームワークのあだ名、ということか。
本名が「1809」とかの数字なのか?本名で呼べばいいのに。また、あだ名多すぎて覚えられないので、本名でもあだ名(Moniker)でもどっちでもいいから統一してほしいと思った。
注意
すべてのUWP APIが、デスクトップAppから使えるわけではなさそう。 下記参照。
参照
そのものズバリのMS公式情報。