Чтобы завершить интеграционный тест вокруг старого старого процесса, который создает подробные файлы на основе определенных входных данных, мне нужно динамически загружать DLL, предоставляя полный путь к файлу.
Этот тест будет работать на многих машинах разных разработчиков, которые не всегда используют один и тот же каталог физических приложений, но также будут работать на многих серверах, поскольку он пробивает процесс непрерывной интеграции, а иногда несколько экземпляров приложения будут работать на одна и та же физическая машина. Дело в том, что нет стандартного пути, на который можно положиться на жесткий код в этом тесте. Мне действительно нужен какой-то механизм, который может указать мне физический путь, который выполняется при выполнении теста в то время, когда он выполняется, и затем я могу использовать относительный путь оттуда, чтобы всегда надежно находить DLL в установке приложения.
Поскольку это находится в тесте, я не могу полагаться на что-то вроде HttpContext.Current.Server.MapPath() или Request.ApplicationPath, так как Current будет иметь значение null при запуске теста.
За исключением написания взлома для развертывания DLL, мне нужно динамически загружать в специальную папку в корне любого диска, который может создавать и запускать приложение, знает ли кто-нибудь хорошую стратегию.NET, чтобы найти физический путь теста во время выполнения?
Я использую NUnit в веб-приложении С#, а также утверждение стиля утверждения утверждения, поэтому простой тест, который должен был бы сделать это, будет выглядеть так:
[Test]
public void ShouldGenerateFileConsistently()
{
string pathToDll = FindRelativePathToDllBasedOnPhysicalPath(); // <-- what I need to figure out
string generatedFileContents = OutputManager.GenerateReportUsingDynamicDll(pathToDll);
Approvals.Verify(generatedFileContents);
}
var codebase = Assembly.GetExecutingAssembly().CodeBase;
var pathUrlToDllDirectory = Path.GetDirectoryName(codebase);
var pathToDllDirectory = new Uri(pathUrlToDllDirectory).LocalPath;
Path.GetFullPath(".")
с System.IO.Path, и я понял, что Path.GetFullPath(".")
Фактически вернет мне то, что я ищу, что это именно то, что возвращает ваш пример, и в одну строку. Ваш ответ помогает подтвердить эту идею, хотя я пока не могу сказать, является ли одно более правильным, чем другое. Похоже, путь - это движение. Ура!