如何返回Visual Studio当前打开的soution目录

时间:2009-01-05 11:33:44

标签: c# .net vb.net visual-studio ide

我有一个Visual Studio解决方案,它由几个项目组成,并分成不同的目录。

在我的C#或VB.NET代码中,我想确定基本目录(或解决方案所在的目录)。

一个肮脏的解决方案是调用目录parent.parent.parent,直到我找到一个文件* .sln,但我在其他目录中也有几个我不想返回的解决方案。

我只是想知道是否有更清洁的方法,可能是System.Diagnostics.Debugger或类似的一部分?

我期待着你的回复,谢谢。

4 个答案:

答案 0 :(得分:1)

即使你在其他目录中有解决方案,可能那些不是原始解决方案中的目录,是吗?您在什么情况下设想“直到找到.sln文件为止”才会失败(除了从错误的目录运行)?

另一种方法是将解决方案目录作为命令行参数传递。

出于兴趣,您需要什么?

答案 1 :(得分:1)

由于sln文件不需要在目标计算机上部署 - 为什么要尝试找到它?
如果你仍然想在EnvDTE Namespace

使用sln- try
  

EnvDTE.DTE dte =(EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject(“VisualStudio.DTE”);            
string folder = System.IO.Path.GetDirectoryName(dte.ActiveDocument.FullName);

答案 2 :(得分:1)

感谢您的回答。一切都非常有帮助。我使用了Dror的答案,并对以下行进行了一些修改,解决了这个问题,谢谢。

string folder = System.IO.Path.GetDirectoryName(dte.Solution.FullName);

我想这样做的原因是在IDE中运行代码时我确定了项目的当前Subversion版本,以便我可以将其嵌入正在运行的软件版本中。

这是自动完成的。请参阅我在codeproject上写的文章: link text

如果您查看代码,您会看到我执行以下操作: dirinfoSourceWorkingDir = dirInfo.Parent()。Parent()。Parent();

我需要确定当前在Visual Studio中打开的解决方案的目录,但想要更清晰的方式(如果我更改目录结构,这将破坏代码)。

希望这是有道理的!

答案 3 :(得分:0)

代码是从解决方案中运行的,即在IDE调试器中运行?如果是这样,您可以将解决方案目录从$(SolutionDir)从IDE传递到命令行。