我有一个Visual Studio解决方案,它由几个项目组成,并分成不同的目录。
在我的C#或VB.NET代码中,我想确定基本目录(或解决方案所在的目录)。
一个肮脏的解决方案是调用目录parent.parent.parent
,直到我找到一个文件* .sln,但我在其他目录中也有几个我不想返回的解决方案。
我只是想知道是否有更清洁的方法,可能是System.Diagnostics.Debugger
或类似的一部分?
我期待着你的回复,谢谢。
答案 0 :(得分:1)
即使你在其他目录中有解决方案,可能那些不是原始解决方案中的目录,是吗?您在什么情况下设想“直到找到.sln文件为止”才会失败(除了从错误的目录运行)?
另一种方法是将解决方案目录作为命令行参数传递。
出于兴趣,您需要什么?
答案 1 :(得分:1)
由于sln文件不需要在目标计算机上部署 - 为什么要尝试找到它?
如果你仍然想在EnvDTE Namespace
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传递到命令行。