目标
为了进行集成测试,我想要加载自定义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运行时,它返回的不是我的项目和/或程序集的位置,而是返回运行时文件夹:
C:/Users/ben/.dnx/runtimes/dnx-clr-win-x86.1.0.0-rc1-update1/bin/Microsoft.Dnx.Loader.dll
相当于请求CodeBase或Executing/CallingAssembly时行为相同。
对于“旧”简单的C#项目和MsTest,我得到了预期的路径。
由于进程不是在项目文件夹中启动的,因此在AppVeyor上无法使用“Environment.CurrentDirectory”,然后该命令返回另一个路径(已启动的项目的路径)。
问题:
在这里处理相对路径的正确方法是什么?
环境:
VS 2015更新1
DNX项目模板
xUnit配置
AppVeyor构建系统