はじめに
既に Microsoft Storte に公開しているアプリケーションを、更新する過程でつまづいたことを備忘録として記述していきます。
同じような事象で悩んでいる人の助けになれば幸いです。
問題の事象
初回リリース時のことは正直覚えていませんが、アプリケーションのビルドをx86からx64に変更しました。(※x86とx64の違いについてはこちらのページを参考にしてください)
プロジェクトのビルドで、プラットフォームターゲットをx64に変更したことで発生しました(多分…
この状態でアプリケーションパッケージプロジェクトから「アプリケーションパッケージの作成」を実行すると、
画像のようにproject.assets.json
が無いというエラーでビルドが停止します。
これはバグか何なのか不明ですが、x86ではそのような事象は発生しなかったと記憶しています(多分…
そして、MSIX パッケージが似非 64 ビットになる件の記事を参考にこの問題を解決しました(ありがとうございます!
手順としては、大元となるプロジェクト(クラスライブラリなどではなくWPFプロジェクト)内のbin
とobj
フォルダを一旦削除します。
その後、Releaseビルドとx64ビルドに変更しビルドします。
そうすると以下のようなファイルが作成されます。
これらのファイルをMSIX パッケージが似非 64 ビットになる件を参考に手動で移動してもよいのですが、プロジェクト内に以下の記述を追加して、アプリケーションパッケージ化をした際に自動で指定のフォルダにコピーされるようにします。
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net8.0-windows10.0.22621.0</TargetFramework>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UseWPF>true</UseWPF>
<UseWindowsForms>true</UseWindowsForms>
<PlatformTarget>x64</PlatformTarget>
<ApplicationIcon>icon.ico</ApplicationIcon>
</PropertyGroup>
<ItemGroup>
<None Remove="nlog.config" />
</ItemGroup>
<ItemGroup>
<Content Include="icon.ico" />
</ItemGroup>
<ItemGroup>
<EmbeddedResource Include="nlog.config">
<CopyToOutputDirectory>Never</CopyToOutputDirectory>
</EmbeddedResource>
</ItemGroup>
<ItemGroup>
<PackageReference Include="CommunityToolkit.Mvvm" Version="8.4.0" />
<PackageReference Include="MahApps.Metro" Version="2.4.10" />
<PackageReference Include="MaterialDesignColors" Version="5.2.1" />
<PackageReference Include="MaterialDesignThemes" Version="5.2.0" />
<PackageReference Include="MaterialDesignThemes.MahApps" Version="5.2.0" />
<PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="9.0.3" />
<PackageReference Include="Microsoft.Xaml.Behaviors.Wpf" Version="1.1.135" />
<PackageReference Include="NLog" Version="5.4.0" />
<PackageReference Include="NLog.Extensions.Logging" Version="5.4.0" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="..\ZahyoKun.Domain\ZahyoKun.Domain.csproj" />
<ProjectReference Include="..\ZahyoKun.Infrastructure\ZahyoKun.Infrastructure.csproj" />
</ItemGroup>
+ <!-- MSIXパッケージ作成時のproject.assets.json自動コピー -->
+ <Target Name="EnsureProjectAssetsForWapPublish" BeforeTargets="GetPackagingOutputs">
+ <PropertyGroup>
+ <ProjectAssetsJsonSource>$(MSBuildProjectDirectory)\obj\project.assets.json</ProjectAssetsJsonSource>
+ <WapPublishDir>$(MSBuildProjectDirectory)\obj\wappublish\$(RuntimeIdentifier)</WapPublishDir>
+ </PropertyGroup>
+ <MakeDir Directories="$(WapPublishDir)" Condition="!Exists('$(WapPublishDir)')" />
+ <Copy SourceFiles="$(ProjectAssetsJsonSource)" DestinationFolder="$(WapPublishDir)" Condition="Exists('$(ProjectAssetsJsonSource)')" />
+ <!-- 他の必要ファイルもコピー -->
+ <ItemGroup>
+ <ObjFiles Include="$(MSBuildProjectDirectory)\obj\*.deps.json" />
+ <ObjFiles Include="$(MSBuildProjectDirectory)\obj\*.cache" />
+ <ObjFiles Include="$(MSBuildProjectDirectory)\obj\*.nuget.dgspec.json" />
+ <ObjFiles Include="$(MSBuildProjectDirectory)\obj\*.nuget.g.props" />
+ <ObjFiles Include="$(MSBuildProjectDirectory)\obj\*.nuget.g.targets" />
+ </ItemGroup>
+ <Copy SourceFiles="@(ObjFiles)" DestinationFolder="$(WapPublishDir)" Condition="Exists('%(FullPath)')" />
+ </Target>
</Project>
.csproj
に追記する記述で以下の作業を自動化しています。
間違いを防止するために、いったん、本体プロジェクトの bin フォルダー・obj フォルダーを削除します。
Releasex64本体プロジェクトのプロパティーで Platform Target が x64 になっていることを確認したうえで、Release | x64 で本体プロジェクトをビルドします。
objobj フォルダーに project.assets.json を含む 5 つのファイルが作成されます。obj フォルダーの中に wappublish フォルダーを作成し、さらにその中に win-x64 フォルダーを作成します。
作成した win-x64 の中に、project.assets.json を含む 5 つのファイルをコピーします(project.assets.json だけでもいいのかもしれませんが)。
ここまでの作業でアプリケーションパッケージ化のビルドもエラーなく通ると思います。
あとはMicrosoftパートナーセンターより座標くん_1.1.2.0_x64_bundle.msixupload
をアップロードして申請すればOKです。
さいごに
興味のある方は座標くんをインストールしてみてください!