如何获得在C#.NET MVC中开发的应用程序的相对根路径?

如何获得在C#.NET MVC中开发的应用程序的相对根路径?,c#,asp.net-mvc,path,C#,Asp.net Mvc,Path,我有一些单元测试需要使用项目中的文件来运行单元测试。这些文件只是图像。我需要使用c#中的某种函数获取图像文件,而不是像下面那样粘贴完整路径 string filePath = @"C:\Users\user1\Documents\Visual Studio 2008\Projects\app1\app1.Tests\Fakes\test_files\test-image.jpg"; 我更愿意做以下事情: string filePath = app.path + "\Fakes\test_fil

我有一些单元测试需要使用项目中的文件来运行单元测试。这些文件只是图像。我需要使用c#中的某种函数获取图像文件,而不是像下面那样粘贴完整路径

string filePath = @"C:\Users\user1\Documents\Visual Studio 2008\Projects\app1\app1.Tests\Fakes\test_files\test-image.jpg";
我更愿意做以下事情:

string filePath = app.path + "\Fakes\test_files\test-images.jpg"
我该怎么做


谢谢

如果您的问题是关于在运行时获取这些文件。。。你不想这么做。您应该以某种方式将这些文件作为构建过程的一部分进行部署,以便它们最终位于相对于编译的二进制文件和其他内容的可预测位置

在Visual Studio中,可以设置任何项目文件的“复制到输出目录”属性,使其将文件放置在输出文件夹中



由于听起来您希望将这些文件作为单元测试的一部分来获取,因此您需要使用类似于MSTest属性
[DeploymentItem]
的内容。这将在运行时将文件放置在测试目录中。请阅读。

为了清楚起见,这不是单元测试。单元测试不应该依赖于环境。不应使用数据库、文件系统等中的任何内容。单元测试只能用于测试单个代码单元。这是因为如果有人关闭源代码并运行单元测试(获取源代码后应该做的第一件事),它将不会运行。他们必须在测试通过之前设置好环境。这些被称为集成测试


也就是说,如果变量只在一个类中,则可以设置变量;如果变量在多个类中,则可以设置app.config。然后,您可以在其中添加一个路径作为默认路径,并将其用作“app.path”。

我不喜欢上面排名靠前的答案,因为它没有回答原始问题

想要获取ASP.NET webapp的根路径是有正当理由的,包括MVC版本。例如,我需要它,以便传入一个“URI模式”,XSL转换稍后使用该模式解析动态服务的XML文档(使用Xpath文档函数)

对于完整的URI,您可以在控制器/页面中对this.Request.Url.AbsoluteUri执行字符串操作


使用this.Request.Path作为当前路径,或使用this.Request.ApplicationPAth作为应用程序的根路径。

我编辑了这个问题,因为我第一次没有正确解释。@bobbymcr-我认为您需要执行所有三个步骤:1)将生成操作标记为内容,2)将Copy设置为Output Directory以始终复制/Copy如果更新,3)在测试中设置DeploymentItemAttribute。我已经根据您的说明更新了我的答案;见下面最后一部分。我95%的时间都同意你的观点。但有时你需要测试一些特殊的东西,比如一张图片。在这些情况下,我喜欢参考“有效地处理遗留代码”中的单元测试定义,其中指出单元测试应该是运行速度快的测试。因此,在图像(测试视觉库)的情况下,我试图找到最小的图像以适合工作。如果它超过几毫秒,我就放弃这个测试,但是如果它非常快,我就把它作为一个单元测试。