如何在c#中获取解决方案路径

时间:2018-06-13 04:06:26

标签: c# visual-studio path

我需要获得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它工作。

但我需要一个“自动”来确保当我在不同的计算机上运行我的项目时路径是正确的。感谢。

2 个答案:

答案 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");