获取ASP.NET MVC网站在文件系统中的路径

8
我有一个ASP.NET MVC项目,其中有一个名为emails的子文件夹。其中包含我的电子邮件模板的HTM文件。在网站的某些点上,我有一个控制器需要加载其中一个模板并将其作为电子邮件发送。
我想要做的是使用反射获取当前执行程序集的路径,但它没有按照我预期的那样工作。我得到的路径是:
var directory = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\Temporary ASP.NET Files\ssl\1da130c4\f8e7810e\assembly\dl3\5f253aca\1a71f123_e83bcc01\Emails\ProductAccountConfirmation.htm" 这个路径很奇怪,因为网站是通过Visual Studio在IIS上托管的。我本以为这会给我我的项目文件夹中的dll位置,在开发环境中和IIS的部署文件夹中的生产环境中。
5个回答

9
你需要的是 Server.MapPath(),它会给你正在执行的应用程序的路径。

4

假设你的电子邮件子文件夹中有一个名为template1.html的文件。以下代码应该可以给你这个HTML文件的完整路径。

HttpContext.Current.Server.MapPath("/") + "\\emails\\template1.html";

3
AppDomain.CurrentDomain.BaseDirectory

当您回复帖子时,请添加解释或详细链接。 - AFract
非常完美,甚至适用于IIS下的子网站。 - Teoman shipahi

1

您可以使用以下代码获取应用程序的根路径:

@HostingEnvironment.ApplicationPhysicalPath

1
使用ASP.Net时,会复制程序集,并且在运行时使用该副本。项目文件夹中的dll仅仅是模板。
你需要这个目录的目的是什么?可能有其他方法可以实现你的目标。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接