Как я узнаю, в каком каталоге мое консольное приложение работает с C#?

Этот метод решил для меня проблему:

private static MyObj DeepCopy(MyObj source)
        {

            var DeserializeSettings = new JsonSerializerSettings { ObjectCreationHandling = ObjectCreationHandling.Replace };

            return JsonConvert.DeserializeObject<MyObj >(JsonConvert.SerializeObject(source), DeserializeSettings);

        }

Используйте его следующим образом: MyObj a = DeepCopy(b);

82
задан Factor Mystic 19 February 2009 в 05:59
поделиться

7 ответов

Для получения каталога, где .exe файл:

AppDomain.CurrentDomain.BaseDirectory

Для получения текущего каталога:

Environment.CurrentDirectory
150
ответ дан Hallgrim 24 November 2019 в 09:11
поделиться

В зависимости от прав, предоставленных Вашему приложению, является ли тень, копирующая , в действительности или не и другой вызов и варианты развертывания, различные методы могут работать или привести к различным результатам, таким образом, необходимо будет выбрать оружие мудро. Однако все следующее приведет к тому же результату для полностью доверяемого консольного приложения, которое выполняется локально в машине, где это находится:

Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( new Uri(Assembly.GetEntryAssembly().CodeBase).LocalPath );
Console.WriteLine( Assembly.GetEntryAssembly().Location );
Console.WriteLine( Environment.GetCommandLineArgs()[0] );
Console.WriteLine( Process.GetCurrentProcess().MainModule.FileName );

необходимо будет консультироваться с документацией вышеупомянутых участников для наблюдения точных необходимых полномочий.

13
ответ дан Atif Aziz 24 November 2019 в 09:11
поделиться

В.NET можно использовать System.Environment.CurrentDirectory для получения каталога, с которого был запущен процесс.
System.Reflection.Assembly.GetExecutingAssembly().Location скажет Вам местоположение в настоящее время выполняющегося блока (это только интересно, если в настоящее время выполняющийся блок загружается из где-нибудь отличающегося, чем местоположение блока где запущенный процесс).

3
ответ дан shA.t 24 November 2019 в 09:11
поделиться

На окнах (не уверенный в Unix и т.д.) это - первый аргумент в командной строке.

В C/C++ первый объект в argv*

WinAPI - GetModuleFileName (ПУСТОЙ УКАЗАТЕЛЬ, символ*, MAX_PATH)

1
ответ дан Jakub Kotrla 24 November 2019 в 09:11
поделиться

Приложение. StartUpPath;

1
ответ дан 24 November 2019 в 09:11
поделиться

Скажем, Вашим названием проекта консольного приложения ядра .NET является DataPrep.

Получают Базовый каталог Проекта:

Console.WriteLine(Environment.CurrentDirectory);

Вывод: Вывод ~DataPrep\bin\Debug\netcoreapp2.2

Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);

: ~DataPrep \

0
ответ дан 24 November 2019 в 09:11
поделиться

Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Location)

5
ответ дан 24 November 2019 в 09:11
поделиться