Этот метод решил для меня проблему:
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);
Для получения каталога, где .exe файл:
AppDomain.CurrentDomain.BaseDirectory
Для получения текущего каталога:
Environment.CurrentDirectory
В зависимости от прав, предоставленных Вашему приложению, является ли тень, копирующая , в действительности или не и другой вызов и варианты развертывания, различные методы могут работать или привести к различным результатам, таким образом, необходимо будет выбрать оружие мудро. Однако все следующее приведет к тому же результату для полностью доверяемого консольного приложения, которое выполняется локально в машине, где это находится:
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 );
необходимо будет консультироваться с документацией вышеупомянутых участников для наблюдения точных необходимых полномочий.
В.NET можно использовать System.Environment.CurrentDirectory
для получения каталога, с которого был запущен процесс.
System.Reflection.Assembly.GetExecutingAssembly().Location
скажет Вам местоположение в настоящее время выполняющегося блока (это только интересно, если в настоящее время выполняющийся блок загружается из где-нибудь отличающегося, чем местоположение блока где запущенный процесс).
На окнах (не уверенный в Unix и т.д.) это - первый аргумент в командной строке.
В C/C++ первый объект в argv*
WinAPI - GetModuleFileName (ПУСТОЙ УКАЗАТЕЛЬ, символ*, MAX_PATH)
Скажем, Вашим названием проекта консольного приложения ядра .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 \
Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Location)