sh1’s diary

プログラミング、読んだ本、資格試験、ゲームとか私を記録するところ

Visual Studio ClickOnce 「項目 "xxx" の公開プロパティを適用できません」の対策

f:id:shikaku_sh:20220418151631p:plain:w200

.NET (.NET Core) でも ClickOnce を利用したアプリケーションの公開(発行)ができると知ったのでテストしてみたところ、「項目 "xxxxx.png" 公開プロパティを適用できません」といった内容の出力が出てしまい、特定のリソース(アセット)をインストール先のアプリケーションに含めることができませんでした。

この対応がちょっとわかりづらかったので、(おそらく改善しそうだけど)やり方をメモ。

ClickOnce でアプリを発行する

ClickOnce で発行するプロセスは、「プロジェクト」を右クリックで選択し「発行」のメニューを押下します。

「ターゲット」「特定のターゲット」「発行場所」「インストール場所」これらは、それほど迷うところは無いと思います。

f:id:shikaku_sh:20220418151858p:plain:w200f:id:shikaku_sh:20220418151901p:plain:w200

注意するポイントは、「設定」。

f:id:shikaku_sh:20220418152341p:plain:w300f:id:shikaku_sh:20220418152343p:plain:w300

「アプリケーションファイル」のリンクを選択して、必要なリソース(画像や設定ファイルなど)が含まれていること(除外されていないか)を確認します。

マニュフェストの署名は、従来通りですね。動かすだけなら、なにも必要ありません。作ってみたいときは「証明書を作成する」が参考になると思いますので割愛。

最終的に setup.exe でインストールを実行します。

発行の設定ファイル

  • プロジェクトフォルダー > Properties > PublishProfiles

.pubxml ファイルを参照します。発行に不明な問題が発生したら、このファイルに異常がでている恐れがあります。

アプリケーションのインストール先

ClickOnce を利用してインストールしたアプリケーションは、Program Files にインストールされるわけではありません。以下のパスになります:

  • C:\Users\ユーザー名\AppData\Local\Apps\2.0

動作検証の段階ではアプリケーションがどのようにインストールされたかを把握するとよいと思います。(アプリケーションのフォルダー名もわかりづらいです)

エラー:項目 "〇〇" 公開プロパティを適用できません

通常であれば、上記の発行をすれば、アプリケーションを配布できるはずなのですが、ビルドの出力情報を読むと特定のリソースについてのメッセージが出力されていました。

setup.exe を作成した発行先フォルダーには、問題のリソースファイルはコピーされています。しかし、setup.exe を使ってインストールしたユーザーのフォルダーには、問題のリソースファイルはコピーされていません

対策

問題の「ClickOnce」の公開(発行)設定を削除しておきます。(念のため再構築する目的)

f:id:shikaku_sh:20220418152458p:plain

問題のあるプロジェクトの .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 の実際のファイル構成も確認しておくとよいです。

参考

徹底解説Visual Studio Code

徹底解説Visual Studio Code

Amazon