.NET (.NET Core) でも ClickOnce を利用したアプリケーションの公開(発行)ができると知ったのでテストしてみたところ、「項目 "xxxxx.png" 公開プロパティを適用できません」といった内容の出力が出てしまい、特定のリソース(アセット)をインストール先のアプリケーションに含めることができませんでした。
この対応がちょっとわかりづらかったので、(おそらく改善しそうだけど)やり方をメモ。
ClickOnce でアプリを発行する
ClickOnce で発行するプロセスは、「プロジェクト」を右クリックで選択し「発行」のメニューを押下します。
「ターゲット」「特定のターゲット」「発行場所」「インストール場所」これらは、それほど迷うところは無いと思います。
注意するポイントは、「設定」。
「アプリケーションファイル」のリンクを選択して、必要なリソース(画像や設定ファイルなど)が含まれていること(除外されていないか)を確認します。
マニュフェストの署名は、従来通りですね。動かすだけなら、なにも必要ありません。作ってみたいときは「証明書を作成する」が参考になると思いますので割愛。
最終的に
setup.exe
でインストールを実行します。
発行の設定ファイル
- プロジェクトフォルダー > Properties > PublishProfiles
.pubxml
ファイルを参照します。発行に不明な問題が発生したら、このファイルに異常がでている恐れがあります。
アプリケーションのインストール先
ClickOnce を利用してインストールしたアプリケーションは、Program Files にインストールされるわけではありません。以下のパスになります:
C:\Users\ユーザー名\AppData\Local\Apps\2.0
動作検証の段階ではアプリケーションがどのようにインストールされたかを把握するとよいと思います。(アプリケーションのフォルダー名もわかりづらいです)
エラー:項目 "〇〇" 公開プロパティを適用できません
通常であれば、上記の発行をすれば、アプリケーションを配布できるはずなのですが、ビルドの出力情報を読むと特定のリソースについてのメッセージが出力されていました。
setup.exe
を作成した発行先フォルダーには、問題のリソースファイルはコピーされています。しかし、setup.exe
を使ってインストールしたユーザーのフォルダーには、問題のリソースファイルはコピーされていません。
対策
問題の「ClickOnce」の公開(発行)設定を削除しておきます。(念のため再構築する目的)
問題のあるプロジェクトの .csproj
ファイルをメモ帳等で開きます。下のように、ItemGroup
を新しくひとつ追加して、Content Include=
の形式で問題リソースを記述します。
<Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> <OutputType>WinExe</OutputType> <TargetFramework>net6.0-windows10.0.17763.0</TargetFramework> <RootNamespace>JSL_Enterprise</RootNamespace> <UseWPF>true</UseWPF> </PropertyGroup> <ItemGroup> <PackageReference Include="DotNetEnv" Version="2.3.0" /> <PackageReference Include="Prism.Unity" Version="8.1.97" /> </ItemGroup> <!-- ItemGroup に公開プロパティを適用できなかった項目を記述 --> <ItemGroup> <Content Include=".env" /> <Content Include="Assets\Images\error.png" /> <Content Include="Assets\Images\info.png" /> <Content Include="Assets\Images\warning.png" /> </ItemGroup> <ItemGroup> <None Update=".env"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> <None Update="Assets\Images\error.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> <None Update="Assets\Images\info.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> <None Update="Assets\Images\warning.png"> <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory> </None> </ItemGroup> </Project>
編集できたら Visual Studio を再起動して、もう一度「ClickOnce」を再編集し「発行」します。問題の出力が表示されないことを確認して、アプリを再インストールします。
AppData
の実際のファイル構成も確認しておくとよいです。