【问题标题】:How do I get the Base Directory of my Project (The path where the .vbproj or .sln file are located)如何获取我的项目的基本目录(.vbproj 或 .sln 文件所在的路径)
【发布时间】:2016-09-04 07:16:13
【问题描述】:

我正在尝试动态获取我的 VB 项目的基本路径,因为运行项目的路径会改变。

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

我尝试使用Application.ExecutablePath, Assembly.GetExecutingAssembly().Location and 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。

【问题讨论】:

  • 为什么exe无论如何都需要知道.sln或.proj文件的位置?
  • 嘿@MattWilko,你建议使用Directory.GetParent(Directory.GetParent(Application.ExecutablePath))吗?会不会总是返回相同的值?
  • 请参阅thisthis 等等...(在某个地方有一个非常好的解释 - 我认为是 Reed Copsey;我会让您使用您的 google-fu 来查找它)。您可能没有有权将文件保存到 EXE 位置,具体取决于它的安装方式/位置。
  • 当然在VS调试时会返回一个VS相关的文件夹。但无论如何,这不是您应该存储数据的地方——您通常无权在运行时写入 EXE 文件夹。将数据存储在 AppData 文件夹 (Users\...) 中,这就是它们的用途,
  • Path.GetDirectoryName(Path.GetDirectoryName(Application.ExecutablePath)),我会重新问马特的问题:你为什么需要这个?如果您发布(或只是移动)您的应用程序,您将无法再访问该文件夹。

标签: vb.net


【解决方案1】:

在设计时工作:

    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”(在程序集 -> 扩展中) 并导入 envDTE。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-21
    • 2012-07-21
    • 2011-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多