调用通过相对路径

时间:2016-03-31 06:39:55

标签: c# .net reflection

我正在开发一个项目,该项目为第三方开发人员提供了一个API,其中包含可以继承的模板类。此开发人员必须通知主进程他们已创建从其中一个模板继承的类型。为此,开发人员调用函数:

internal Dictionary<string, Type> Templates = new Dictionary<string, Type>();

public void RegisterTemplate(string ID, Type template)
{
    ...
    Templates.Add(ID, template);
    ...
}

注意:RegisterTemplate是程序的成员,而不是外部库的成员。

开发人员为此函数提供的类型中的函数调用相对路径,例如&#34; Audio / somefile.wav&#34;或&#34; Models / somefile.vox&#34;。第三方开发人员将其继承类编译为DLL并将其放在与程序分开的文件夹中,以便稍后由程序导入。 / p>

如果程序调用上面粗体描述的函数,那么关联的路径是相对于调用Type的程序,还是相对于调用的Type来自的DLL?

澄清:而不是正在执行的程序集或DLL的相对路径,我正在讨论DLL中调用的路径,如下所示:

File.Open("Audio/somefile.wav");

如果从DLL中的函数调用此代码,并且包含此代码的类型由我的可执行文件中的代码调用,则此路径是相对于调用Type的可执行文件,还是包含调用的DLL的相对类型?

2 个答案:

答案 0 :(得分:0)

路径取决于你打电话的方式。

例如

System.IO.Path.GetDirectoryName(Application.ExecutablePath);

返回可执行文件的路径(如果从您的dll调用,也是如此),

System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);

将返回你的dll的路径。

请查看此discussion或此post以获取更多信息和示例。

根据MSDN,File.Open() - Methode正在调用Directory.GetCurrentDirectory()。所以你要调用相对于你的可执行文件的文件。

答案 1 :(得分:0)

感谢Fruchtzwerg和Adriano Repetti的投入;

相对路径相对的目录依赖于Environment,而不是可执行文件或称为它的DLL。在这种情况下,Environment的CurrentDirectory是包含可执行文件的目录。

在这种情况下打开的文件位于“C:/.../ ApplicationDirectory / Sounds / somefile.wav”