我正在开发一个项目,该项目为第三方开发人员提供了一个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的相对类型?
答案 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”