[解決済み] asp.net coreでプロジェクトのルートディレクトリを取得する方法。MacでDirectory.GetCurrentDirectory()が正しく動作しないようです。
質問内容
私のプロジェクトは、次のようなフォルダ構造になっています。
- プロジェクト。
- プロジェクト/データ
- プロジェクト/エンジン
- プロジェクト/サーバー
- プロジェクト/フロントエンド
サーバー(Project/Serverフォルダで実行)では、このようにフォルダを参照します。
var rootFolder = Directory.GetCurrentDirectory();
rootFolder = rootFolder.Substring(0,
rootFolder.IndexOf(@"\Project\", StringComparison.Ordinal) + @"\Project\".Length);
PathToData = Path.GetFullPath(Path.Combine(rootFolder, "Data"));
var Parser = Parser();
var d = new FileStream(Path.Combine(PathToData, $"{dataFileName}.txt"), FileMode.Open);
var fs = new StreamReader(d, Encoding.UTF8);
私のWindowsマシンでは、このコードは以下のようにうまく動作します。
Directory.GetCurrentDirectory()
は現在のフォルダを参照し、そして
rootFolder.Substring(0, rootFolder.IndexOf(@"\Project\", StringComparison.Ordinal) + @"\Project\".Length);
は、私にプロジェクトのルートフォルダを取得します(binやデバッグフォルダではありません)。
しかし、私がMacでそれを実行したとき、それは"を得ました。
Directory.GetCurrentDirectory()
と表示され、/usr//[something else]に移動してしまいました。それは私のプロジェクトがあるフォルダーを参照しませんでした。
私のプロジェクトで相対パスを見つけるための正しい方法は何ですか。ソリューション内のすべてのサブプロジェクト、特に kestrel サーバー プロジェクトから簡単にアクセスできる方法で、データ フォルダーをどこに格納すればよいでしょうか。データフォルダはチームの別のメンバーによって管理されており、私は最新バージョンにアクセスしたいだけなので、wwwrootフォルダに格納する必要がないことを希望しています。私のオプションは何ですか?
どのように解決するのですか。
ケストレルパイプラインのどこにいるかにもよりますが、もしあなたが
IConfiguration
(
Startup.cs
コンストラクタ
) または
IWebHostEnvironment
(
以前は
IHostingEnvironment
) を注入することができます。
IWebHostEnvironment
をコンストラクタに注入するか、 あるいは単に設定からキーを要求します。
インジェクト
IWebHostEnvironment
で
Startup.cs
コンストラクタ
public Startup(IConfiguration configuration, IWebHostEnvironment env)
{
var contentRoot = env.ContentRootPath;
}
Startup.cs コンストラクタで IConfiguration を使用する。
public Startup(IConfiguration configuration)
{
var contentRoot = configuration.GetValue<string>(WebHostDefaults.ContentRootKey);
}
関連
-
[解決済み] EntityTypeにキーが定義されていないエラー
-
[解決済み] [Solved] .NETでスレッドの終了を待つには?
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み] ファイルのフルパスからディレクトリを取得する方法を教えてください。
-
[解決済み] ASP.NET CoreでカスタムのAuthorizeAttributeを作成する方法は?
-
[解決済み] ASP.NET Coreで.jsonファイルからAppSettingsの値を読み込む方法
-
[解決済み] ASP.NET CoreでAutomapperを設定する方法
-
[解決済み】ASP.NET COREでクライアントのIPアドレスを取得する方法とは?
-
[解決済み】ASP.NET Core IConfigurationを使ったJson配列の取得
-
[解決済み】ASP.NET CoreでCORSを有効にする方法
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] [Solved] 1つ以上のエンティティで検証に失敗しました。詳細は'EntityValidationErrors'プロパティを参照してください [重複]。
-
[解決済み] [Entity Framework 4.1でエンティティに関連オブジェクトを追加する際に、エンティティオブジェクトをIEntityChangeTracker.の複数のインスタンスから参照できない。
-
[解決済み】プロジェクトビルド時のエラー。エディタでスクリプトにコンパイルエラーがあるため、Playerのビルドにエラーが発生する
-
[解決済み】「入力文字列が正しい形式ではありませんでした」エラーの解決方法は?[重複しています]。
-
[解決済み】C# ASP.NET使用時に「WebClientのリクエスト中に例外が発生しました。
-
[解決済み】値が期待した範囲に収まらない
-
[解決済み】ファイルへの読み書きの際に共有違反のIOExceptionが発生する C#
-
[解決済み】インデックスが範囲外でした。コレクションパラメータname:indexのサイズより小さく、非負でなければなりません。
-
[解決済み】ファイルやアセンブリ、またはその依存関係の1つをロードできませんでした。
-
[解決済み] アプリケーションフォルダのパスを取得する最適な方法