3

我正在尝试从文件中写入相对路径,但我能获得的唯一相对路径来自正在运行的应用程序文件。

这会导致问题,因为 NCrunch 从不​​同的目录运行它的测试,所以它失败了我的所有测试,因为它找不到与我的代码文件相关的文件。

这是一个相对路径很重要,因为有几个人在这个项目上工作,所以绝对路径不起作用。

有没有办法使路径相对于编写代码的 .cs 文件?

直到现在我一直在使用

 private static readonly string MyDocumentsRoot =      Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments);
        public static readonly string ApplicationRoot = MyDocumentsRoot + @"\Visual Studio 2012\Projects\";

但真的需要它是相对的一点

4

5 回答 5

3

该解决方案在 NCRUNCH 文档中有详细记录:

隐式文件依赖

其他解决方案迟早会失败。(我在使用 MSTest 时遇到了类似的问题,它提供了类似的解决方案)。

于 2012-10-29T14:53:49.520 回答
1

您可以尝试使用此代码 - 基于GetExecutingAssembly方法

string path  = System.Reflection.Assembly.GetExecutingAssembly().Location;
string directory= Path.GetDirectoryName( path );

或者

  string path  = System.Reflection.Assembly.GetAssembly(YourClass).Location;
于 2012-10-29T14:34:16.943 回答
0

您可以使用str=Directory.getdirectorywhich 将为您提供应用程序的路径(直到 Release 或 Debug 之前的文件夹(您的应用程序所在的位置)并将其保存在字符串中(该方法返回一个字符串)。之后,您可以使用str.replace(str1,str2)方法 which定位str1并用 . 替换它str2。只是不要忘记\在字符串中是\\因为\是转义字符。如果您需要转义字符方面的帮助,请告诉我,以便我也可以为您提供帮助。

于 2012-10-29T14:34:34.620 回答
0

文档显示路径是相对于项目文件的:

例如,您可以指定要包含的以下文件:

SpecialConfiguration\ImportantConfigFile.config
..\CustomBuild\**.*
..\..\TestResources\Spreadsheets\*.xls

这将包括单个文件 (ImportantConfigFile.config)、..\CustomBuild目录的全部内容、其所有子目录以及目录中的所有 .xls 文件..\..\TestResources\Spreadsheets

所有文件路径必须相对于磁盘上项目文件的路径指定。当 NCrunch 构建工作空间时,它会自动排列所有相关文件,使它们在工作空间中的相对路径与它们在原始位置中的相对路径相同。

于 2012-10-29T14:34:45.190 回答
0

我通常会在我的可执行文件所在的位置放置一个老式的 ini 文件。这里我存储了应用程序所需的文件和文件夹的绝对路径。这也使我能够在生产环境(在客户站点上)与在我的开发环境中以不同的方式配置这些路径。在 NCrunch 运行程序集的文件夹中仅保留此 ini 文件的副本即可解决问题。

我的 ini 文件实现搜索所有文件夹,从可执行文件所在的文件夹开始,一直到根文件夹,直到找到 ini 文件。这使我能够使用通用的 ini 文件拥有不同的可执行文件。例如,如果将 ini 文件放在bin文件夹中,则DebugRelease版本将自动访问相同的 ini 文件。

于 2012-10-29T14:54:42.153 回答