我正在通过ClickOnce分发应用程序(从网络'在线运行'),应用程序中包含的是一些文本文件,这些文件在发布时会正确复制到部署位置。
我试图以编程方式引用这些文件的路径:
Dim t As New HTMLTemplate("ReportTemplates\IncidentDetailMain.txt")
有时这有效,有时应用程序似乎在用户的My Documents文件夹中查找,导致DirectoryNotFoundException。
有谁能解释这里发生了什么?
答案 0 :(得分:3)
最好的方法是使用
System.Windows.Forms.Application.StartupPath
它将为您提供应用程序可执行文件所在的文件夹的uri。然后,您可以使用在您的情况下始终应该与可执行文件位于相同路径中的参考文件。
这可以用于WinForms和WPF应用程序。
如果让用户打开/保存文件等,System.Environment.CurrentDirectory可能会在应用程序的生命周期内发生变化 - 因此StartupPath更安全。
所以,你的最终代码是:
string filePath = Path.Combine(
System.Windows.Forms.Application.StartupPath,
"ReportTemplates\IncidentDetailMain.txt");
.. = new HTMLTemplate(filePath);
答案 1 :(得分:1)
最安全的方法是获取exe的路径,然后以此为基础。
您可以使用以下位置System.Environment.CurrentDirectory
执行此操作