VBのWindowsフォームアプリでApp.configを環境ごとに分けてビルド
解決したいこと
Debug、Release、その他複数定義をして、ビルドごとにApp.config
を変更したいと考えています。
※可能であれば設定値を暗号化して見えないようにしたい。
よくある要件であり、対処方法が確立されていると予想していますが、やり方がわかりません。
以下のやり方にこだわりがあるわけではありません。
やりたいことは
- Debug、Release、その他複数定義をして、ビルドごとに
App.config
を変更したい - できる限り定番のやり方で解決したい
- ビルド定義を追加するたびにソースを変更するなどのことはしたくない
- 可能であれば
- ユーザに設定値を見られたくないので暗号化
- もしくは、埋め込みリソースとしてexeに組み込みたい
発生している問題・エラー
試行錯誤を繰り返し、ビルドの過程でApp.Debug.config
をApp.config
にコピーしてビルドをして成功はしたと思いました。
しかし手順を整理して再現させようとしたところ、環境によりエラーになる場合とならない場合があり、状況が整理できていません。
該当するソースコード
下記のvbprojの場合、想定通りコピーまではされるが初回のビルドでは、実行時に$(Target).ext.conifg
が読み込めずエラーになります。
2回目実行時は、App.conifg
から$(Target).ext.config
が再作成され、exeにリンクされているせいか、期待通りの動きをします。
一度成功したと思われる、MyPoroject.vbproj
ファイル
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<PreBuildEvent>
copy /Y "$(ProjectDir)App.Debug.config" "$(ProjectDir)App.config"
</PreBuildEvent>
</PropertyGroup>
自分で試したこと
- ビルド後に
App.Debug.config
を$(TargetName).exe.config
として、出力先にコピーする- $(ProjectDir)が取得できたり、できなかったりするためコピー先を
-
$(SolutionDir)MyProjectFolder\bin\Debug\net8.0-windows\$(TargetName).exe.config
にする -
$(OutDir)\$(TargetName).exe.config
にする -
$(TargetDir)$(TargetName).exe.config
にする
-
- $(ProjectDir)が取得できたり、できなかったりするためコピー先を
- ビルド前に
App.Debug.config
をApp.config
として、ソースのあるフォルダにコピーする-
$(SolutionDir)MyProjectFolder\App.config
にする
-