根据文件C#的位置获取目录

时间:2012-10-29 14:30:44

标签: c# directory ncrunch

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

这会导致问题,因为NCrunch从不同的目录运行测试,因此它无法完成所有测试,因为它无法找到与我的代码文件相关的文件。

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

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

直到现在我一直在使用

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

但确实需要它更加相对

5 个答案:

答案 0 :(得分:3)

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

Implicit File Dependencies

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

答案 1 :(得分:1)

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

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

  string path  = System.Reflection.Assembly.GetAssembly(YourClass).Location;

答案 2 :(得分:0)

您可以使用str=Directory.getdirectory来提供应用程序的路径(直到Release或Debug(应用程序所在的位置)的文件夹)并将其保存在字符串中(该方法返回一个字符串)。这样做,您可以使用找到str.replace(str1,str2)的{​​{1}}方法并将其替换为str1。只是不要忘记字符串中的str2\因为\\是一个逃脱角色。如果你需要有关逃脱角色的帮助,请告诉我,这样我也可以帮助你。

答案 3 :(得分:0)

documentation显示路径相对于项目文件:

  

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

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

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

     

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

答案 4 :(得分:0)

我通常会在我的可执行文件所在的位置放置一个旧样式的ini文件。这里我存储了应用程序所需的文件和文件夹的绝对路径。这也使我能够在生产环境(在cutomers网站上)以不同于我的开发环境的方式配置这些pathes。只有NCrunch运行组件的文件夹中的这个ini文件的副本才能解决问题。

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