Visual Studio では、ドロップダウン ボタンからAdd
->Existing Item
を実行できます。Add as Link
Add
これは素晴らしい。これにより、別のプロジェクトからファイルを追加できます。ファイルを編集すると、元のプロジェクトでも編集されます。
この機能を使用して、構成ファイル (Shared.config という名前) を 1 つのソリューション内のすべてのプロジェクトに存在させたいと考えています。そして、そのファイルを常に同じにしてください。
ソリューション
|
|- プロジェクト 1
|
- Shared.config [物理]
|- プロジェクト 2
|
- Shared.config [リンク済み]
パブリッシュ後、ファイルは実際にパブリッシュされたすべてのプロジェクトで終了するため、問題はありません。
しかし、公開前 (ビルドの開発中) には、リンクされたファイルは実際には存在しません。Windows エクスプローラーでファイルを表示しようとすると、ファイルがプロジェクト ディレクトリにないことがわかります。Visual Studio は、ソリューション エクスプローラーに存在するかのように見せるだけです。(ビルド時に、リンクされたアイテムはおそらくディレクトリにコピーされbin
ますが、ディレクトリからファイルを使用/アクセスしたくありませんbin
。)
今、これはもちろん問題を引き起こします。System.IO.File.ReadAllText(HttpContext.Current.Server.MapPath("Shared.config"))
Shared.config がプロジェクトのルート ディレクトリにまだ存在しないため、プロジェクトが発行される前に印刷しようとすると失敗します。
私がやりたいことと、あなたの助けが必要なところは次のとおりです。
- リンクされたすべてのファイルを元の場所からターゲットの場所にコピーしたいと思います。
これにより、ビジュアルスタジオにリンクされたファイルと元のコピーが作成され、同じ名前の同じディレクトリに両方が存在します。
通常、ディレクトリに同じ名前のファイルが既に含まれている場合、VS はそのディレクトリにリンクされたアイテムを作成することを許可しません。
ただし、最初にリンクされたアイテムを作成してテストしました。次に、Windows エクスプローラーを使用して元のファイルを宛先ディレクトリにコピーし、Visual Studio が正常に動作することを確認します。ソリューション エクスプローラーは単に物理ファイルを非表示にし、代わりにリンクされたアイテムを表示します。Show all files
(ソリューション エクスプローラーをクリックした場合でも。)
ソリューション
|
|- プロジェクト 1
|
- Shared.config [物理]
|- プロジェクト 2
|
- Shared.config [リンク]
|
- Shared.config [物理、ビルド中にここにコピーされ、ソリューション エクスプローラーには表示されない]
これはまさに私が欲しいものです!ファイルを編集しようとすると、Visual Studio は「リンクされた項目」を開きます。また、ビルド時に、物理ファイルがターゲット ディレクトリにコピーされるため、アクセスしようとするコード用に存在します。
どうすればいいですか?これは Build イベントで行う必要がありますか? その場合、「リンクされたすべてのファイルのオリジナルを宛先ディレクトリにコピーする」と言うにはどうすればよいですか?