【问题标题】:Determine current path with DNX projects确定 DNX 项目的当前路径
【发布时间】:2016-04-25 02:34:18
【问题描述】:

目标

对于集成测试,我想加载自定义 XML 配置。此 XML 位于我的集成测试项目中的一个文件夹中。

对于更多目标,我想使用新的 DNX 项目。我知道它们仍处于预览阶段。

本地测试工作正常。 现在的问题是,我不能使用相对路径,因为测试系统当前目录信息是不是我项目的项目文件夹。 AppVeyor 也有同样的问题。

构建代理在另一个文件夹中启动,因此相对路径信息错误并失败。 这里没有惊喜。

我试图用这个 sn-p 解决这个问题:

public abstract class IntegrationTestBase
{
    public static string CurrentPath()
    {
        string codeBase = typeof (IntegrationTestBase).Assembly.Location;
        UriBuilder uri = new UriBuilder( codeBase );
        string path = Uri.UnescapeDataString( uri.Path );
        return Path.GetDirectoryName( path );
    }
}

问题

这里的问题是:由于新的 DNX 运行时,它返回的不是我的项目和/或程序集的位置,而是返回运行时文件夹:

C:/Users/ben/.dnx/runtimes/dnx-clr-win-x86.1.0.0-rc1-update1/bin/Microsoft.Dnx.Loader.dll

如果我要求 CodeBase 或 Executing/CallingAssembly,则行为相同。

使用“旧”的简单 C# 项目和 MsTest,我得到了预期的路径。

Environment.CurrentDirectory 在 AppVeyor 上不起作用,因为进程未在项目文件夹中启动,然后此命令返回另一个路径(启动项目的路径)。

问题

在这里使用相对路径的正确方法是什么?

环境

  • VS 2015 更新 1
  • DNX 项目模板
  • xUnit 配置
  • AppVeyor 构建系统

【问题讨论】:

    标签: c# asp.net xunit dnx appveyor


    【解决方案1】:

    在 DNX 项目中,您必须添加依赖项 Microsoft.Extensions.PlatformAbstractions,然后才能使用 PlatformServices.Default.Application.ApplicationBasePath

    甚至更容易没有额外的依赖: 使用System.AppContext.BaseDirectory

    也许是因为将来本机编译反射的东西不起作用。 我认为System.AppContext.BaseDirectory 是最简单的解决方案。 PlatformServices.Default.Application 继承了 IApplicationEnvironment 接口,该接口默认注入到新的 ASP.NET Core 应用程序中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-09-07
      • 2015-03-20
      相关资源
      最近更新 更多