You may enjoy this more general solution which depends on finding the solution *.sln
file by scanning all parent directories from current or selected one while covering the case of not finding the solution directory!
public static class VisualStudioProvider
{
public static DirectoryInfo TryGetSolutionDirectoryInfo(string currentPath = null)
{
var directory = new DirectoryInfo(
currentPath ?? Directory.GetCurrentDirectory());
while (directory != null && !directory.GetFiles("*.sln").Any())
{
directory = directory.Parent;
}
return directory;
}
}
Usage:
// get directory
var directory = VisualStudioProvider.TryGetSolutionDirectoryInfo();
// if directory found
if (directory != null)
{
Console.WriteLine(directory.FullName);
}
In your case:
// resolve file path
var filePath = Path.Combine(
VisualStudioProvider.TryGetSolutionDirectoryInfo()
.Parent.FullName,
"filename.ext");
// usage file
StreamReader reader = new StreamReader(filePath);
Enjoy!
Now, a warning.. Your application should be solution-agnostic - unless this is a personal project for some solution processing tool I wouldn't mind. Understand that, your application once distributed to users will reside in a folder without the solution. Now, you can use an "anchor" file. E.g. search parent folders like I did and check for existence of an empty file app.anchor
or mySuperSpecificFileNameToRead.ext
;P If you want me to write the method I can - just let me know.
Now, you may really enjoy! :D