【问题标题】:Getting directory based the location of file C#基于文件C#的位置获取目录
【发布时间】:2012-10-29 14:30:43
【问题描述】:

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

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

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

有什么方法可以使路径相对于编写代码的 .cs 文件?

直到现在我一直在使用

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

但确实需要它更加相对

【问题讨论】:

  • 如果你喜欢答案接受它

标签: c# directory ncrunch


【解决方案1】:

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

Implicit File Dependencies

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

【讨论】:

    【解决方案2】:

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

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

    或者

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

    【讨论】:

    【解决方案3】:

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

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

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

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

    所有文件路径必须指定相对于项目文件在磁盘上的路径。 当 NCrunch 构建工作空间时,它会自动排列所有依赖文件,以便它们在工作空间中以相同的相对路径存在他们在原来的位置做了。

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

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

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-03-03
          • 1970-01-01
          • 2011-01-21
          • 1970-01-01
          • 1970-01-01
          • 2021-04-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多