現在、c#のビジュアルスタジオでプロジェクトを作成しています。プロジェクトの完全パスは次のとおりです。
"C:\TFS\MySolution\"
実行中にロードする必要があるファイルがあります。ファイルのパスが
"C:\TFS\MySolution\Project1\NeedtoLoad.xml"
ハードコーディングされたフルパスを記述したくないし、動的な方法でパスを取得したい。
次の行を使用します。
var path = Directory.GetCurrentDirectory();
私が見つけたすべてのメソッドと上記のコード行が次のパスを取得するという問題:
"C:\TFS\MySolution\Project1\bin\Debug"
そして、私が必要なのは
"C:\TFS\MySolution\Project1\"
だから私は連結することができました
NeedtoLoad.xml
答えに。
もちろん私はできる:
path.Substring(0, path.IndexOf("bin\\Debug"));
しかし、それはそれほどエレガントではありません。
Directory.GetParent
とそのParent
メンバーを使用できます
string path = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName;
パスツリーを2レベル上に移動し、"C:\TFS\MySolution\Project1"
を返します。
Xmlがプロジェクトの静的な部分である場合(実行時にそれをオーバーライドしない)、おそらく、それをdllに含めることが最善の方法です。
DLLリソースからロードするだけです。
var asm = Assembly.GetCallingAssembly();
using (var stream = asm.GetManifestResourceStream(resource))
{
var reader = new StreamReader(stream);
return reader.ReadToEnd();
}
そのファイルがプロジェクトの一部である場合は、ビルド時にプロジェクト出力にコピーされることを確認する必要があります。
ソリューションエクスプローラーでファイルを選択し、Visual Studio(F4)のプロパティペインに移動します。 「ビルドアクション」として「コンテンツ」を選択します。これで、ソリューションをビルドすると、ファイルが出力ディレクトリ(bin/Debugまたはbin/Release)にコピーされます。