Vb.net 如何获取项目的基本目录(.vbproj或.sln文件所在的路径)

Vb.net 如何获取项目的基本目录(.vbproj或.sln文件所在的路径),vb.net,Vb.net,我正在尝试动态获取VB项目的基本路径,因为运行项目的路径将发生变化 假设VB项目文件位于C:\MyVBProjects\May2016\MyProject\MyApp.vbproj 我尝试使用Application.ExecutablePath,Assembly.getexecutiongassembly().Location和Application.StartupPath 以上三个返回C:\MyVBProjects\May2016\MyProject\bin\Debug\ 我还尝试使用以下代码

我正在尝试动态获取VB项目的基本路径,因为运行项目的路径将发生变化

假设VB项目文件位于
C:\MyVBProjects\May2016\MyProject\MyApp.vbproj

我尝试使用
Application.ExecutablePath,Assembly.getexecutiongassembly().Location和Application.StartupPath

以上三个返回
C:\MyVBProjects\May2016\MyProject\bin\Debug\

我还尝试使用以下代码:

Curr = Directory.GetCurrentDirectory()
Root = Directory.GetRootDirectory(Curr)
这只返回
C:\

我是否可以让它说
C:\MyVBProjects\May2016\MyProject\

我目前正在Windows 7上使用Visual Basic 2012。

在设计时起作用:

    Dim DTE As EnvDTE.DTE = System.Runtime.InteropServices.Marshal.GetActiveObject("VisualStudio.DTE")
    Dim Prj As Project = DTE.Solution.Projects.Item(1)
    Dim PrjFile As String = Prj.FullName
您应该引用“envdte”(在Assemblys->extensions中)
并导入envDTE。

为什么exe需要知道.sln或.proj文件的位置?嘿@MattWilko您建议使用
Directory.GetParent(Directory.GetParent(Application.ExecutablePath))
?但是,这会始终返回相同的值吗?请参见和其他许多内容。。。(在某个地方有一个很好的解释——我想是里德·科佩写的;我会让你用谷歌fu来找到它)。您可能没有权限将文件保存到EXE位置,具体取决于文件的安装方式/安装位置。当然,当从VS在调试中运行时,它将返回一个与VS相关的文件夹。但无论如何,这不是您应该存储数据的位置-您通常无权在运行时写入EXE文件夹。将数据存储在AppData文件夹(
Users\…
)中,这正是它们的用途,
Path.GetDirectoryName(Path.GetDirectoryName(Application.ExecutablePath))
,我将再次问Matt的问题:为什么需要这个?如果您发布(或只是移动)应用程序,您将无法再访问该文件夹。