Como descubro em qual diretório meu aplicativo de console está sendo executado?

93

Como faço para descobrir em qual diretório meu aplicativo de console está sendo executado com C #?

John Sheehan
fonte

Respostas:

164

Para obter o diretório onde está o arquivo .exe:

AppDomain.CurrentDomain.BaseDirectory

Para obter o diretório atual:

Environment.CurrentDirectory
Hallgrim
fonte
2
Obrigado. Ajuda quando o C # .exe está em uma pasta, mas é chamado de outra pasta (por exemplo: quando está no PATH do sistema)
DeepSpace101
14
Para .NET Core, sim System.AppContext.BaseDirectory.
NightOwl888
15

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.

Atif Aziz
fonte
5

Path.GetDirectoryName (Assembly.GetExecutingAssembly (). Localização)

Jason Kanaris
fonte
3

No .NET, você pode usar System.Environment.CurrentDirectorypara obter o diretório a partir do qual o processo foi iniciado.
System.Reflection.Assembly.GetExecutingAssembly().Locationinformará 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).

Travis Illig
fonte
1

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)

Jakub Kotrla
fonte
Sim, é o mesmo no .NET também. Primeiro arg é sempre o caminho completo do executável.
Adam Neal,
1

Application.StartUpPath;


fonte
preocupa-se em ligar a alguma documentação?
John Sheehan
0

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 \

RM Shahidul Islam Shahed
fonte
0

Use AppContext.BaseDirectorypara .net5.

vivek nuna
fonte