Цел
За integration тестовете искам да заредя персонализирана XML конфигурация. Този XML е разположен в папка вътре в проекта за integration тестовете.
За по-далечни цели иска мда ползвам новите DNX проекти.
Локалните тестове работят добре. Проблемът е,че не мога да ползвам относителни пътища, защото заради тестовата система, информацията,която се пази за текущата директория , не е за директорията, в коят е проектът. Същия проблем имам с AppVeyor.
Build agent-а се пуска в друга папка и информацията за относителния път е грешка и се чупи. Не е голяма изненада.
Опитах да го оправя с този код:
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 Runtime, това връща не локацията на проекта и/или assembly-то,а връща папката на runtime:
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 Update 1
- DNX Project templates
- xUnit configuration
- AppVeyor build system