web-dev-qa-db-ja.com

クラスライブラリ内のファイルへのパス

ファイルの内容を返すクラスライブラリプロジェクト(NotificationTemplate)があります。

public static class Template
{
    public static string NotificatioEmail
    {
        get { return File.ReadAllText("Templates\\NotificatioEmail.cshtml"); }
    }
}

このプロジェクトには、NotificatioEmail.cshtmlファイルを含むフォルダTemplatesがあります。

また、コンソールアプリとASP.NETMVCアプリの2つのアプリケーションがあります。ファイルはコンソールアプリで正常に返されましたが、MVCでエラーfile not foundが発生します。普遍的に書く方法は?
私はこれを試しました:

Path.Combine(System.AppDomain.CurrentDomain.BaseDirectory, "Templates",
             "NotificatioEmail.cshtml")

ただし、BaseDirectoryにはbinフォルダーは含まれません。

17
user348173

あなたが言ったように、BaseDirectoryはコンソールアプリで機能します。 MVCアプリケーションの場合は、代わりに RelativeSearchPath を使用してください。

したがって、このコードを両方のプラットフォームで使用できます

var appDomain = System.AppDomain.CurrentDomain;
var basePath = appDomain.RelativeSearchPath ?? appDomain.BaseDirectory;
Path.Combine(basePath, "Templates", "NotificatioEmail.cshtml");
40
p.s.w.g