确定 DNX 项目的当前路径
Determine current path with DNX projects
目标
对于集成测试,我想加载自定义 XML 配置。这个 XML 位于我的集成测试项目中的一个文件夹中。
对于更多目标,我想使用新的 DNX 项目。我知道它们仍在预览中。
本地测试工作正常。
现在的问题是,我不能使用相对路径,因为测试系统当前目录信息是 而不是 我项目的项目文件夹。
AppVeyor 也有同样的问题。
构建代理在另一个文件夹中启动,因此相对路径信息错误而失败。
没有惊喜。
我试图用这个片段解决这个问题:
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 运行时,这个 returns 不是我的项目 and/or 程序集的位置,它 returns 运行时文件夹:
C:/Users/ben/.dnx/runtimes/dnx-clr-win-x86.1.0.0-rc1-update1/bin/Microsoft.Dnx.Loader.dll
如果我要求 CodeBase 或 Executing/CallingAssembly,行为相同。
使用 "old" 简单的 C# 项目和 MsTest,我得到了预期的路径。
Environment.CurrentDirectory
在 AppVeyor 上不起作用,因为进程没有在项目文件夹中启动,然后这个命令 returns 另一个路径(启动项目的路径)。
问题
此处使用相对路径的正确方法是什么?
环境
- VS 2015 更新 1
- DNX 项目模板
- x单元配置
- AppVeyor 构建系统
在 DNX 项目中你必须添加依赖项 Microsoft.Extensions.PlatformAbstractions
然后才能使用
PlatformServices.Default.Application.ApplicationBasePath
或者在没有额外依赖的情况下更容易:
使用 System.AppContext.BaseDirectory
可能是因为将来本地编译反射的东西不会起作用。
我认为 System.AppContext.BaseDirectory
是最简单的解决方案。
PlatformServices.Default.Application
继承了 IApplicationEnvironment
接口,该接口在新 ASP.NET 核心应用程序中默认注入。
目标
对于集成测试,我想加载自定义 XML 配置。这个 XML 位于我的集成测试项目中的一个文件夹中。
对于更多目标,我想使用新的 DNX 项目。我知道它们仍在预览中。
本地测试工作正常。 现在的问题是,我不能使用相对路径,因为测试系统当前目录信息是 而不是 我项目的项目文件夹。 AppVeyor 也有同样的问题。
构建代理在另一个文件夹中启动,因此相对路径信息错误而失败。 没有惊喜。
我试图用这个片段解决这个问题:
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 运行时,这个 returns 不是我的项目 and/or 程序集的位置,它 returns 运行时文件夹:
C:/Users/ben/.dnx/runtimes/dnx-clr-win-x86.1.0.0-rc1-update1/bin/Microsoft.Dnx.Loader.dll
如果我要求 CodeBase 或 Executing/CallingAssembly,行为相同。
使用 "old" 简单的 C# 项目和 MsTest,我得到了预期的路径。
Environment.CurrentDirectory
在 AppVeyor 上不起作用,因为进程没有在项目文件夹中启动,然后这个命令 returns 另一个路径(启动项目的路径)。
问题
此处使用相对路径的正确方法是什么?
环境
- VS 2015 更新 1
- DNX 项目模板
- x单元配置
- AppVeyor 构建系统
在 DNX 项目中你必须添加依赖项 Microsoft.Extensions.PlatformAbstractions
然后才能使用
PlatformServices.Default.Application.ApplicationBasePath
或者在没有额外依赖的情况下更容易:
使用 System.AppContext.BaseDirectory
可能是因为将来本地编译反射的东西不会起作用。
我认为 System.AppContext.BaseDirectory
是最简单的解决方案。
PlatformServices.Default.Application
继承了 IApplicationEnvironment
接口,该接口在新 ASP.NET 核心应用程序中默认注入。