Ancora un'altra soluzione imperfetta (ma forse un po 'più vicina alla perfezione di alcune delle altre):
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);
}
Questa versione restituirà la cartella dei progetti correnti anche se il progetto corrente non è il fileStartup Project
adatto alla soluzione.
Il primo difetto di questo è che ho saltato tutto il controllo degli errori. Questo può essere risolto abbastanza facilmente, ma dovrebbe essere un problema solo se stai memorizzando il tuo progetto nella directory principale per l'unità o stai usando un junction nel tuo percorso (e quel junction è un discendente della cartella della soluzione) quindi questo scenario è improbabile . Non sono del tutto sicuro che Visual Studio possa comunque gestire una di queste configurazioni.
Un altro (più probabile) problema che potresti incontrare è che il nome del progetto deve corrispondere al nome della cartella per il progetto per poterlo trovare.
Un altro problema che potresti avere è che il progetto deve trovarsi nella cartella della soluzione. Questo di solito non è un problema, ma se hai usato l' Add Existing Project to Solution
opzione per aggiungere il progetto alla soluzione, questo potrebbe non essere il modo in cui è organizzata la tua soluzione.
Infine, se l'applicazione modificherà la directory di lavoro, è necessario memorizzare questo valore prima di farlo perché questo valore è determinato in relazione alla directory di lavoro corrente.
Ovviamente, tutto ciò significa anche che non è necessario modificare i valori predefiniti per le opzioni ' Build
-> Output path
o Debug
-> Working directory
dei progetti nella finestra di dialogo delle proprietà del progetto.