如何在 C# 解决方案中引用不同文件夹中的文件

How to reference a file in a different folder in a C# solution

我想知道是否有人可以帮助我..

我在一个 Visual Studio 项目中工作,我们最近开始为我们的项目进行单元测试。

单元测试依赖于在解决方案中引用 Excel 文件。

我们添加了在引用文件方面似乎在我们自己的每个环境中都运行良好的代码,而且一切似乎都很好。

我们现在还设置了 TFS 以触发它 运行 每次提交时的所有单元测试和报告,现在显示出一些问题,因为几乎所有的测试都失败了,尽管它们都失败了运行在我们自己的环境中成功。

TFS 似乎没有提供任何测试失败原因的日志记录,但我们假设它与路径引用有关。

所以我们的解决方案结构是这样的..

..\head\Solution\Project\project.csproj
..\head\Solution\Tests\TestFiles\spreadsheet.xlsx

我们目前正在使用以下代码来引用电子表格..

string filename = Path.Combine(Directory.GetParent(Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName, "Tests\TestFiles\spreadsheet.xlsx");
ExcelImporter importer = new ExcelImporter(filename);

似乎我们明确调用了一组父文件夹,这在构建服务器环境中可能不一样。

假设我们永远不知道解决方案的父文件夹有多少,我们如何才能更好地引用电子表格文件?

我真的不会这样,你的单元测试所在的物理路径 运行 在构建服务器上与你的本地开发机器上可能非常不同。

一般来说,您应该简单地在单元测试项目中包含(甚至将其添加为 link)对解决方案项(excel 文件)的引用,然后您可以设置它的 属性 复制到输出文件夹,以便在生成单元测试程序集时,excel 文件也将复制到与单元测试程序集相同的位置,然后在测试方法的顶部,您可以声明以这种方式与标准属性的依赖关系:

[DeploymentItem("spreadsheet.xlsx")]

这至少应该适用于 MS 测试,我们使用它并且没有任何问题。

在单元测试项目中创建一个文件夹,我们称之为 "Resources",然后将您的文件复制到那里。确保文件属性将您的文件设置为始终复制到输出。

然后在你的单元测试中获取这样的文件:

string filename = Path.Combine(Environment.CurrentDirectory, "Resources\spreadsheet.xlsx");

相关link:Enviroment.CurrentDirectory