Como faço para descobrir em qual diretório meu aplicativo de console está sendo executado com C #?
Como faço para descobrir em qual diretório meu aplicativo de console está sendo executado com C #?
Respostas:
Para obter o diretório onde está o arquivo .exe:
AppDomain.CurrentDomain.BaseDirectory
Para obter o diretório atual:
Environment.CurrentDirectory
System.AppContext.BaseDirectory
.
Dependendo dos direitos concedidos ao seu aplicativo, se a cópia de sombra está em vigor ou não e outras opções de invocação e implantação, métodos diferentes podem funcionar ou produzir resultados diferentes, portanto, você terá que escolher sua arma com sabedoria. Dito isso, todos os itens a seguir produzirão o mesmo resultado para um aplicativo de console totalmente confiável que é executado localmente na máquina onde reside:
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 );
Você precisará consultar a documentação dos membros acima para ver as permissões exatas necessárias.
Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Localização)
No .NET, você pode usar System.Environment.CurrentDirectory
para obter o diretório a partir do qual o processo foi iniciado.
System.Reflection.Assembly.GetExecutingAssembly().Location
informará a localização do assembly em execução no momento (isso só é interessante se o assembly em execução no momento for carregado de algum lugar diferente do local do assembly onde o processo foi iniciado).
No Windows (não tenho certeza sobre Unix, etc.), é o primeiro argumento na linha de comando.
Em C / C ++ primeiro item em argv *
WinAPI - GetModuleFileName (NULL, char *, MAX_PATH)
Digamos que o nome do seu projeto de aplicativo de console principal .Net seja DataPrep.
Obtenha o diretório base do projeto:
Console.WriteLine(Environment.CurrentDirectory);
Saída: ~ DataPrep \ bin \ Debug \ netcoreapp2.2
Get Project .csproj file directory:
string ProjectDirPath = Path.GetFullPath(Path.Combine(Environment.CurrentDirectory, @"..\..\..\"));
Console.WriteLine(ProjectDirPath);
Saída: ~ DataPrep \
Use AppContext.BaseDirectory
para .net5.