我需要获得te解决方案文件(.sln)所在的路径。我试着用这句话:
string startupPath = Path.Combine(Directory.GetParent(System.IO.Directory.GetCurrentDirectory()).Parent.Parent.Parent.FullName,"abc.txt");
// Read the file as one string.
string text = System.IO.File.ReadAllText(startupPath);
我得到了另一篇文章。但是当我运行它时,我得到未经授权的访问异常。当我把路径“手动”:C:\ Users \ yabej \ source \ repos \ tutoriales \ Proyecto 0.1它工作。
但我需要一个“自动”来确保当我在不同的计算机上运行我的项目时路径是正确的。感谢。
答案 0 :(得分:1)
使用 EnvDTE100 NuGet 包在 Visual Studio 2019 中为我找到正确解决方案路径的正确方法。
说明:仅适用于单个 VS 实例打开(来源 @junliantolovich)
确保为您的 Visual Studio 使用正确的 ProgId:
using System;
using EnvDTE80;
using System.IO;
using System.Runtime.InteropServices;
namespace Test
{
public class Program
{
public static void Main()
{
var di = GetSolutionDirInfo();
Console.WriteLine(di.FullName);
}
public static DirectoryInfo GetSolutionDirInfo()
{
// Use here the ProgId of your Visual Studio
// VS 2010 -> "VisualStudio.DTE.10.0"
// VS 2012 -> "VisualStudio.DTE.11.0"
// VS 2013 -> "VisualStudio.DTE.12.0"
// VS 2015 -> "VisualStudio.DTE.14.0"
// VS 2017 -> "VisualStudio.DTE.15.0"
// VS 2019 -> "VisualStudio.DTE.16.0"
var progId = "VisualStudio.DTE.16.0";
var dte2 = (DTE2)Marshal.GetActiveObject(progId);
return Directory.GetParent(dte2.Solution.FullName);
}
}
}
答案 1 :(得分:0)
如果将文件(abc.txt)添加到解决方案中,则可以在文件属性中将“复制到输出目录”设置为“始终复制”。确保构建操作设置为“无”。然后在构建过程中,它将被复制到与可执行文件相同的位置,您可以使用
获取路径var path = Path.Combine(Directory.GetCurrentDirectory(), "\\abc.txt");