Em vez de executar um programa externo com seu caminho codificado, eu gostaria de obter o Dir atual do projeto. Estou chamando um programa externo usando um processo na tarefa personalizada.
Como eu faria isso? AppDomain.CurrentDomain.BaseDirectory apenas fornece a localização do VS 2008.
fonte
Se um projeto estiver sendo executado em um IIS Express,
Environment.CurrentDirectory
poderá apontar para onde o IIS Express está localizado (o caminho padrão seria C: \ Arquivos de Programas (x86) \ IIS Express ), e não para onde o seu projeto reside.Este é provavelmente o caminho de diretório mais adequado para vários tipos de projetos.
Esta é a definição do MSDN.
fonte
Isso também fornecerá o diretório do projeto, navegando dois níveis acima do diretório em execução atual (isso não retornará o diretório do projeto para cada construção, mas é o mais comum).
É claro que você gostaria de conter isso dentro de algum tipo de lógica de validação / tratamento de erros.
fonte
Se você quiser saber qual é o diretório em que sua solução está localizada, faça o seguinte:
Se você deixar apenas o
GetCurrrentDirectory()
método, obterá a pasta de compilação, independentemente de estar depurando ou liberando. Espero que isso ajude! Se você esquecer as validações, seria assim:fonte
Eu também estava procurando por isso. Eu tenho um projeto que executa o HWC e gostaria de manter o site fora da árvore de aplicativos, mas não quero mantê-lo no diretório de depuração (ou liberação). FWIW, a solução aceita (e essa também) apenas identifica o diretório em que o executável está sendo executado.
Para encontrar esse diretório, eu tenho usado
fonte
Com base na resposta de Gucu112 , mas para o aplicativo .NET Core Console / Window, deve ser:
Estou usando isso em um projeto xUnit para um aplicativo .NET Core Window.
fonte
Outra maneira de fazer isso
Se você deseja obter o caminho para a pasta bin
Talvez haja uma maneira melhor =)
fonte
Ainda outra solução imperfeita (mas talvez um pouco mais perto da perfeição do que algumas outras):
Esta versão retornará a pasta dos projetos atuais, mesmo que o projeto atual não seja o
Startup Project
da solução.A primeira falha disso é que eu pulei toda a verificação de erros. Isso pode ser corrigido com bastante facilidade, mas só deve ser um problema se você estiver armazenando seu projeto no diretório raiz da unidade ou usando uma junção no caminho (e essa junção é descendente da pasta da solução), portanto, esse cenário é improvável. . Não tenho certeza de que o Visual Studio possa lidar com qualquer uma dessas configurações de qualquer maneira.
Outro problema (mais provável) que você pode encontrar é que o nome do projeto deve corresponder ao nome da pasta para o projeto ser encontrado.
Outro problema que você pode ter é que o projeto deve estar dentro da pasta da solução. Isso geralmente não é um problema, mas se você tiver usado a
Add Existing Project to Solution
opção de adicionar o projeto à solução, talvez não seja assim que sua solução está organizada.Por fim, se seu aplicativo modificar o diretório ativo, você deverá armazenar esse valor antes de fazer isso, pois esse valor é determinado em relação ao diretório ativo atual.
Obviamente, tudo isso também significa que você não deve alterar os valores padrão das opções de seus projetos '
Build
->Output path
ouDebug
->Working directory
na caixa de diálogo de propriedades do projeto.fonte
Tente isso, é simples
fonte
Essa solução funciona bem para mim, nos servidores Develop e também nos servidores TEST e PROD com o ASP.NET MVC5 via C # :
Se você precisar do diretório do projeto no arquivo de configuração do projeto, use:
fonte
Depois que eu finalmente terminei de polir minha primeira resposta em relação a nós de cadeias públicas para obter uma resposta, ocorreu-me que você provavelmente poderia ler um valor do registro para obter o resultado desejado. Acontece que essa rota era ainda mais curta:
Primeiro, você deve incluir o espaço para nome Microsoft.Win32 para poder trabalhar com o registro:
Aqui está o código principal:
Uma observação sobre esta resposta:
Estou usando o Visual Studio 2008 Professional Edition. Se você estiver usando outra versão (2003, 2005, 2010; etc.), talvez seja necessário modificar a parte 'version' da string SubKey (8.0, 7.0; etc.).
Se você usar uma das minhas respostas, e se não for pedir muito, gostaria de saber quais dos meus métodos você usou e por quê. Boa sorte.
fonte
Eu tive uma situação semelhante e, depois de Googles infrutíferos, declarei uma string pública, que modifica um valor de string do caminho de depuração / lançamento para obter o caminho do projeto. Uma vantagem de usar esse método é que, como ele usa o diretório do projeto currect, não importa se você estiver trabalhando em um diretório de depuração ou diretório de release:
Você seria capaz de chamá-lo quando quiser, usando apenas uma linha:
Isso deve funcionar na maioria dos casos.
fonte
Use isso para obter o diretório do projeto (funcionou para mim):
fonte
fonte
Eu usei a seguinte solução para fazer o trabalho:
fonte
Experimentar:
Esta é uma solução diferente das outras, também leva em consideração a possível compilação x86 ou x64.
fonte
A melhor solução
Outra solução
Testá-lo, AppDomain.CurrentDomain.BaseDirectory funcionou para mim no projeto passado, agora recebo a pasta de depuração .... a resposta BOA selecionada simplesmente NÃO FUNCIONA !.
fonte
Se você realmente deseja garantir a obtenção do diretório do projeto de origem, não importa em que caminho da saída da bandeja esteja definido:
Adicione uma linha de comando do evento de pré-construção (Visual Studio: Propriedades do projeto -> Construir eventos):
echo $(MSBuildProjectDirectory) > $(MSBuildProjectDirectory)\Resources\ProjectDirectory.txt
Inclua o
ProjectDirectory.txt
arquivo no arquivo Resources.resx do projeto (se ainda não existir, clique com o botão direito do mouse em projeto -> Adicionar novo item -> arquivo Recursos)Resources.ProjectDirectory
.fonte
Isso funciona nas configurações do VS2017 com SDK Core MSBuild.
Você precisa do NuGet nos pacotes EnvDTE / EnvDTE80.
Não use COM ou interoperabilidade. qualquer coisa .... lixo !!
fonte
Directory.GetParent (Directory.GetCurrentDirectory ()). Parent.Parent.Parent.Parent.FullName
Fornecerá o diretório do projeto.
fonte