在类库中获取当前目录

3
我正在开发一个使用 .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);
}

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

4个回答

6

是的,你需要考虑@Hagai Shahar的回答,最好的方法是使用AppDomain.CurrentDomain.BaseDirectory


4

试一试

Environment.CurrentDirectory

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

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

1
我认为这将产生与他在“string currentDir”中的第一行相同的结果。 - MethodMan
谢谢,Environment.CurrentDirectory 返回当前目录。 - VansFannel

2
请注意,Environment.CurrentDirectory并不一定返回包含应用程序文件的目录。它取决于您从哪里启动了应用程序。
例如,如果exe文件位于C:\ User \ ProgramName \ prog.exe,但您像这样从cmd启动应用程序:
C:\> C:\User\ProgramName\prog.exe

如果你调用Environment.CurrentDirectory,将会得到C:\而不是C:\User\ProgramName

此外,快捷方式也会出现这种情况:

Application properties screen shot

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

另一种解决方法是获取运行应用程序的程序集的位置,类似于:

typeof(Program).Assembly.Location


1
你不能使用相对路径来引用类库中的内容,因为你的类库是一个.dll文件,而不是一个文件夹结构。你可以设置文件的“复制到输出目录”属性为“始终复制”,这样,你的json文件将会和项目一起被复制到调试文件夹中。
这意味着你的文件将被放置在Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)文件夹中,这意味着你的LoadData()将正常工作。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接