【问题标题】:Get current dir in a class library获取类库中的当前目录
【发布时间】:2021-08-23 17:49:37
【问题描述】:

我正在使用 .Net Framework 4.5.1 开发一个 C# 库,以便在 Windows 8.1 桌面应用程序中使用它。

在这个库项目中,我有一个JSON 文件,我想加载它。首先,我试图用这个来获取当前目录:

string currentDir = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

但是,我已经测试过了,Assembly.GetEntryAssembly() 为空。

也许,我可以使用资源文件而不是 JSON 文件。

这是方法:

private void LoadData()
{
    string currentDir = 
        Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);

    string file = 
        Path.Combine(currentDir, cardsDir, cardsFile);

    string json =
        File.ReadAllText(file);

    Deck = JsonConvert.DeserializeObject<Card[]>(json);
}

有什么想法吗?有更好的方法吗?如何获取当前目录?

【问题讨论】:

    标签: c# json wpf windows-8 windows-8.1


    【解决方案1】:

    试试这个

    Environment.CurrentDirectory
    

    这将返回您的应用程序的当前工作目录。现在您可以访问与您的应用程序相关的任何文件

    string currentDir = Path.GetDirectoryName(Environment.CurrentDirectory);
    

    【讨论】:

    • 我认为这将产生与他在string currentDir 中的第一行相同的结果
    • 谢谢,Environment.CurrentDirectory 返回当前目录。
    【解决方案2】:

    是的,你必须考虑@Hagai Shahar 的回答,要走的路是使用 AppDomain.CurrentDomain.BaseDirectory

    【讨论】:

      【解决方案3】:

      注意Environment.CurrentDirectory不一定返回包含应用程序文件的目录。这取决于您从何处启动应用程序。

      例如,如果 exe 文件位于 C:\User\ProgramName\prog.exe,但您从 cmd 启动应用程序,如下所示:

      C:\> C:\User\ProgramName\prog.exe
      

      ...Environment.CurrentDirectory 的结果将是 C:\ 而不是 C:\User\ProgramName

      此外,它也发生在快捷方式中:

      看到“开始”属性了吗?如果设置了它,它将成为Environment.CurrentDirectory 的结果,因为应用程序将从那里启动。

      另一种解决方案是获取运行应用程序的程序集的位置,如下所示:

      typeof(Program).Assembly.Location

      【讨论】:

        【解决方案4】:

        您不能使用相对路径引用类库中的某些内容,因为您的库将是一个 .dll 文件,而不是文件夹结构。您可以做的是将文件的Copy if newer 属性设置为Copy always。这样,您的 json 将与项目一起复制到调试文件夹中。

        这意味着您的文件将被放置在Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location) 文件夹中,这意味着您的LoadData() 可以正常工作

        【讨论】:

          猜你喜欢
          • 2010-10-21
          • 2012-01-29
          • 2016-08-20
          • 2013-01-29
          • 1970-01-01
          • 2013-04-14
          • 2011-04-21
          • 2010-10-26
          • 1970-01-01
          相关资源
          最近更新 更多