C# 如何返回Visual Studio当前打开的源目录
我有一个VisualStudio解决方案,它由几个项目组成,并被分成不同的目录 在我的C#或VB.NET代码中,我想确定基本目录(或解决方案所在的目录) 一个肮脏的解决方案是调用目录C# 如何返回Visual Studio当前打开的源目录,c#,.net,vb.net,visual-studio,ide,C#,.net,Vb.net,Visual Studio,Ide,我有一个VisualStudio解决方案,它由几个项目组成,并被分成不同的目录 在我的C#或VB.NET代码中,我想确定基本目录(或解决方案所在的目录) 一个肮脏的解决方案是调用目录parent.parent.parent,直到我找到一个文件*.sln,但我在其他目录中也有一些不想返回的解决方案 我只是想知道是否有更干净的方法,可能是System.Diagnostics.Debugger或类似方法的一部分 我期待着您的回复,谢谢。即使您在其他目录中有解决方案,这些可能不是您原始解决方案中的目录,
parent.parent.parent
,直到我找到一个文件*.sln,但我在其他目录中也有一些不想返回的解决方案
我只是想知道是否有更干净的方法,可能是System.Diagnostics.Debugger
或类似方法的一部分
我期待着您的回复,谢谢。即使您在其他目录中有解决方案,这些可能不是您原始解决方案中的目录,是吗?在什么情况下,“递归直到找到一个.sln文件”会失败(而不是从错误的目录运行) 另一种方法是将解决方案目录作为命令行参数传递
出于兴趣,您需要它做什么?因为sln文件不需要部署在目标机器上-为什么要尝试查找它?
如果仍要使用sln,请尝试 EnvDTE.DTE DTE=(EnvDTE.DTE)System.Runtime.InteropServices.Marshal.GetActiveObject(“VisualStudio.DTE”);
string folder=System.IO.Path.GetDirectoryName(dte.ActiveDocument.FullName)
代码是否从解决方案中运行,即在IDE调试器中运行?如果是这样,您可以将解决方案目录作为
$(SolutionDir)
从IDE传递到命令行。谢谢您的回答。他们都很有帮助。我使用了Dror的答案,并对下面的行进行了一些修改,解决了这个问题,谢谢
string folder = System.IO.Path.GetDirectoryName(dte.Solution.FullName);
我想这样做的原因是,在IDE中运行代码时,我确定项目的当前Subversion版本,以便将其嵌入到运行的软件版本中
这是自动完成的。请参阅我在codeproject上写的文章:
如果您查看代码,您将看到我执行以下操作:
dirinfoSourceWorkingDir=dirInfo.Parent().Parent().Parent()
我需要确定当前在VisualStudio中打开的解决方案的目录,但需要一种更干净的方法(如果我更改目录结构,这将破坏代码)
希望这有意义 如果有两个或多个实例打开,这可能不起作用。您必须在running objects表中找到正确的实例。代码就在那里。