相对路径返回意外值

时间:2014-09-20 17:36:00

标签: .net vb.net winforms .net-4.0 oledb

这行代码

Assembly.LoadFrom(".\MyAssembly.dll")

在一台计算机上抛出以下错误:

  

System.IO.FileNotFoundException:无法加载文件或程序集'file:/// \\ Server1 \ Data \ MyAssembly.dll'或其依赖项之一。系统找不到指定的文件。

MyAssembly.dll存在于应用程序的安装位置(不在Server1上),并且应用程序的所有其他实例都正确地找到程序集。我不是在打电话

Directory.SetCurrentDirectory

应用程序中的任何位置,应用程序不使用任何PATH或其他环境变量。

问题在应用程序抛出不同错误后启动:

  

System.Data.OleDb.OleDbException:表达式中未定义的函数'todate'。

基于以下连接字符串

  

提供商= Microsoft.ACE.OLEDB.12.0;数据源= \\ Server1 \ Data \ MyDataBase.accdb; Persist Security Info = False;

对OLEDB的调用是否设置了当前目录,然后将其保留为\\ Server1 \ Data,因为它失败了?

我应该在这台机器上寻找一些环境变量,可以设置我的应用程序的当前目录吗?

2 个答案:

答案 0 :(得分:0)

尝试使用此变量获取当前路径

 Environment.CurrentDirectory

Assembly.LoadFrom(Path.Combine(Environment.CurrentDirectory & "\MyAssembly.dll"))

答案 1 :(得分:0)

不要假设当前目录是常量。

用户可以使用不同的工作目录创建快捷方式,也可以在命令提示符下从任意目录启动应用程序。
此外,标准库的某些特定方法可以在运行时更改当前目录 (我知道OpenFileDialog / SaveFileDialog(未设置RestoreDirectory为真)这样做。)

OLEDB也可能会更改当前目录,但不关心 永远不要依赖当前目录。

要获取应用的目录,请改用System.Windows.Forms.Application.StartupPath