Перейти к папке в корне моего проекта - ASP.NET Core 3.1

У меня есть корневая папка TestLogging, содержащая решение. У меня есть консольное приложение, у которого есть собственный каталог, и тестовый проект, у которого также есть собственный каталог.

В проводнике Windows я вручную создал каталог Configuration в корневой папке TestLogging, в котором есть xml файл с именем Configuration.config.

Я пытаюсь перейти к этому пути с помощью кода для ссылки на этот файл без использования абсолютного пути к нему.

Я пробовал варианты примеров отсюда, используя System.IO, и все они указывают на каталог сборки текущего проекта, который выполняется, например. MyConsoleApp\bin\Debug\netcoreapp3.1

Вот некоторые из вещей, которые я пробовал:

string defaultPath = System.IO.Directory.GetCurrentDirectory();

// this does the same as above!
string pathToConsoleApp = Path.GetFullPath(AppContext.BaseDirectory);

// very similar to the other two!
var projectPath = Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)));

Appoligies в продвинутом, если это было продублировано.


person user1574598    schedule 11.09.2020    source источник


Ответы (1)


Решение

string configpPath = Path.Combine(Directory.GetParent(System.IO.Directory.GetCurrentDirectory()).Parent.Parent.FullName, "Configuration.config.xml");

Тестовый код

class Program
{
    static void Main(string[] args)
    {
        string defaultPath = System.IO.Directory.GetCurrentDirectory();

        // this does the same as above!
        string pathToConsoleApp = Path.GetFullPath(AppContext.BaseDirectory);

        // very similar to the other two!
        var projectPath = Path.GetDirectoryName(Path.GetDirectoryName(Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)));

        string configpPath = Path.Combine(Directory.GetParent(System.IO.Directory.GetCurrentDirectory()).Parent.Parent.FullName, "Configuration.config.xml");


        Console.WriteLine("Hello World!");
        Console.WriteLine("defaultPath:   " + defaultPath);
        Console.WriteLine("pathToConsoleApp:   " + pathToConsoleApp);
        Console.WriteLine("projectPath:   " + projectPath);
        Console.WriteLine("configpPath:   " + configpPath);
    }
}

Результат испытаний

введите описание изображения здесь

введите описание изображения здесь

person Michael Wang    schedule 11.09.2020
comment
Спасибо за ваш ответ. Я не уверен, что это сработает. Приношу свои извинения за то, что не думаю, что уделял достаточно внимания тесту. Это тестовый проект xUnit, и моя проблема заключается в том, что методы System.IO начинают указывать на папку bin тестового проекта. Мне нужен постоянный, но чистый способ ссылки на этот файл конфигурации в консольном приложении или где-либо еще. Надеюсь, в этом есть больше смысла. - person user1574598; 11.09.2020
comment
Я отмечу это как правильное, поскольку оно показывает мне, как добраться до корня проекта, но я думаю, что мне придется открыть новый вопрос, который более подробно описывает проблемы с моим тестовым проектом. - person user1574598; 12.09.2020