Ainda outra solução imperfeita (mas talvez um pouco mais perto da perfeição do que algumas outras):
protected static string GetSolutionFSPath() {
return System.IO.Directory.GetParent(System.IO.Directory.GetCurrentDirectory()).Parent.Parent.FullName;
}
protected static string GetProjectFSPath() {
return String.Format("{0}\\{1}", GetSolutionFSPath(), System.Reflection.Assembly.GetExecutingAssembly().GetName().Name);
}
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
ou Debug
-> Working directory
na caixa de diálogo de propriedades do projeto.