|
返信ありがとうございます。 書き込み遅くなりすいません。
>>ビルドすると当然exe.configが作成されます。 > .config が無い場合、「開発時に設定されていた値」が既定値として使われますので、 > たとえアプリケーション構成ファイルを削除しても、アプリはそのまま動きますよ。 > (Settings.Designer.cs 内に、DefaultSettingValueAttribute で記録されています) これも一度ハマりましたが、ネット検索したらその事が書いてあり、分かりました。 こちらで発生したのはファイルはあるのに項目名がプログラムと違うのに動いてしまう現象になり、多分これと同等の理由だと思います。
>>必ずexe.configが上書きされることが分かりました。 > どれが上書きされていますか? > > (a) プロジェクトに含めている app.config の内容 > (b) ビルド結果が出力されるフォルダの project1.exe.config の内容 > (c) 実行時に Properties.Settings.Default で参照される内容 > (d) (ユーザーフォルダ)\Local Settings\Application Data\CompanyName\(appdomainname)_(eid)_(hash)\1.0.0.0\user.config の内容 最初のプロジェクトを「11111」、追加したのを「22222」と表記させてもらいます。 デバッグの結果表示を変更しました。
1>入力ファイル "obj\Release\22222.csproj.22222.exe.config" は出力ファイル "bin\Release\22222.exe.config" よりも新しいです。
という表示が出てますので「obj\Release\22222.csproj.22222.exe.config」が上書きされてると分かりました。 最初のプロジェクトでは、
1>すべての出力ファイルが入力ファイルに対して最新なので、ターゲット "_CopyAppConfigFile" を省略します。
と出ているので上書きされていないようです。 追加したプロジェクトで「obj\Release\22222.csproj.22222.exe.config」がどこで更新されてるのかを追ってみました。
1>ターゲット "GenerateBindingRedirects" を完全にビルドしています。 1>入力ファイル EnvDTE, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a は存在しません。 1>"GenerateBindingRedirects" タスクをアセンブリ "Microsoft.Build.Tasks.v12.0, Version=12.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" から使用しています。 1>タスク "GenerateBindingRedirects" (TaskId: 14) 1> タスク パラメーター:AppConfigFile=App.config 1> OriginalItemSpec=App.config 1> TargetPath=22222.exe.config (TaskId: 14) 1> タスク パラメーター:TargetName=22222.exe.config (TaskId: 14) 1> タスク パラメーター:OutputAppConfigFile=obj\Release\22222.csproj.22222.exe.config (TaskId: 14) 1> タスク パラメーター: 1> SuggestedRedirects= 1> EnvDTE, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a 1> MaxVersion=8.0.0.0 (TaskId: 14) 1> MaxVersion "8.0.0.0" を使用して、"EnvDTE, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" 上で推奨されるバインド リダイレクトを処理しています。 (TaskId: 14) 1>タスク "GenerateBindingRedirects" の実行が終了しました。 (TaskId: 14)
とあるので、ここで更新されてるようです。 最初のプロジェクトでは、
1>false 条件により、ターゲット "GenerateBindingRedirects" を省略しました。('$(AutoGenerateBindingRedirects)' == 'true' and '$(GenerateBindingRedirectsOutputType)' == 'true') は ('' == 'true' and 'true' == 'true') として評価されました。
と"GenerateBindingRedirects" は省略されています。 追加したプロジェクトは「PublicKeyToken=b03f5f7f11d50a3a は存在しません」と表示されてるのでこれが原因で更新されてる気がしてきました。 ただなぜ存在しないのかがデバッグ結果を見てもまだ分かりません。 時間が作れたら詳しく調べてみたいと思います。
> "x86" ビルドのプロジェクトを "上書きされるAny CPU" 構成で扱うのは混乱の元なので、 > 直しておいた方が良いと思いますが…何かそうすべき理由があったのでしょうか。 すいません、3人で開発してますが、全員C#の経験が浅い者なため、こうなった理由が不明です。 既にこの2つのプロジェクトが実運用してるので、動いてるものを変更して何か影響あるのは避けたいため今はそのままにしてます。 落ち着いたらx86に変更して、動作確認を実施したいと思ってます。
>>exe.configを自分で編集した後は、ビルドしても上書きしないようにしたいのですが、 > exe.config というのは、上記の (b) のことでしょうか? > だとしたら、(a) を編集する運用に変えた方が良いでしょう。 私がapp.configを自分用データベース設定にして一時運用してました。 チェックインする時はそれ以外の変更分のみチェックインしていました。 ただ大量に修正し、ソリューションからチェックインした時にapp.configを除外しなかったため全員私のデータベースを見る環境になってしまいました。 3人が別々のデータベースを見るため3人ともデータベースの設定を自分用に書き換えてテストをしています。 テスト中、勝手にデータ書き換えられると検証できないため完全に別データベースでテストしてました。
> だとすれば、Visual Studio のオプション設定画面を開き、 > [プロジェクト及びソリューション]-[ビルド/実行]にて、 > MSBuild のログ出力の範囲を広げてみてください。 ありがとうございます。 ビルドの結果表示を変更できるとは知りませんでした。 今回このおかげでいろいろ原因を追うことができました。 大変助かりました。
今、別案件に入ったため、この調査はまた時間がとれた時にやりたいと思います。 多分「PublicKeyToken=b03f5f7f11d50a3a は存在しません」というのが原因だとは思います。 ざっとビルド結果見る限り、今はその原因は不明ですが。
大変有意義な情報を知ることができ、大変助かりました。 ありがとうございました。
|