Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何返回Visual Studio当前打开的源目录_C#_.net_Vb.net_Visual Studio_Ide - Fatal编程技术网

C# 如何返回Visual Studio当前打开的源目录

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或类似方法的一部分 我期待着您的回复,谢谢。即使您在其他目录中有解决方案,这些可能不是您原始解决方案中的目录,

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

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

一个肮脏的解决方案是调用目录
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表中找到正确的实例。代码就在那里。