Introduction

前回は空のアプリを動かした。
次はVisual Studio からではなく、exeとして実行して動かす。

Resolution

結論から言えば、*.csproj に1行追加するだけで解決した。
プロジェクトファイル内に WindowsPackageType の行を追加する。

1
2
3
4
5
6
7
8
9
10
11
12
13
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows10.0.19041.0</TargetFramework>
<TargetPlatformMinVersion>10.0.17763.0</TargetPlatformMinVersion>
<RootNamespace>App2</RootNamespace>
<ApplicationManifest>app.manifest</ApplicationManifest>
<Platforms>x86;x64;arm64</Platforms>
<RuntimeIdentifiers>win10-x86;win10-x64;win10-arm64</RuntimeIdentifiers>
<UseWinUI>true</UseWinUI>
<UseWPF>False</UseWPF>
<WindowsPackageType>None</WindowsPackageType>
</PropertyGroup>

これにより、Visual Stduio からも、exeの直接実行でもプログラムが起動するようになった。
ただ、注意するべきなのは、前回インストールした The .exe installer, and MSIX packages が必須であること。

Appendix

では、このプログラムを他のマシンにもっていって動くかどうかというと…動かない。
上で書いた The .exe installer, and MSIX packages が影響する。

この影響を確認するために、非開発マシンにビルドした bin\x64\Debug\net6.0-windows10.0.19041.0 を持っていき、exeを実行する。

app

上記のエラーがでるので、 .NET Desktop Runtime 6.0.1 をインストールして再度実行したが、何も起きない。
イベントビューアを見ると

app

Application: App2.exe
CoreCLR Version: 6.0.121.56705
.NET Version: 6.0.1
Description: The application requested process termination through System.Environment.FailFast(string message).
Message: インデックスに指定されたキーと一致するものがありませんでした。 (0x80070491)
Stack:
at System.Environment.FailFast(System.String)
at Microsoft.Windows.ApplicationModel.DynamicDependency.BootstrapCS.AutoInitialize.AccessWindowsAppSDK()
at ..cctor()

という要領の得ないエラーが出ている。

Visual Studio から発行を選び、必要なバイナリを全部梱包しても同じ結果。

この状況を解決するには、先に書いたように、The .exe installer, and MSIX packages をインストールする。
インストールできれば、Visual Studioで通常ビルドしたバイナリも発行で作成したバイナリのどちらも動くようになる。

app

Windows 10出ビルドしたバイナリを Windows 11 上で動かした例。

Struggle

以下は試してダメだった件。

nugetでMicrosoft.ui.xamlをインストール

前回、パッケージ化されていないプロジェクトをデバッグ実行した際、

Unable to load DLL ‘Microsoft.ui.xaml.dll’ or one of its dependencies: 指定されたモジュールが見つかりません。 (0x8007007E)’

と出力された。

単純に考えれば、Microsoft.ui.xaml.dll が実行ディレクトリに存在しない、システムにも存在しないということだが、確かに実行ディレクトリには存在しない。
システムを検索してみると、 C:\Program Files\WindowsApps\Microsoft.UI.Xaml.2.0_2.1810.18004.0_x64__8wekyb3d8bbwe なる複数のバイナリとnugetパッケージ化が確認できた。

なので、nugetパッケージをインストールしてみたがエラーになる。
環境がおかしいのか

app