C#程序目前的工作目录在运行时找不到东西,原因是
C#程序当前的工作目录在运行时找不到东西,原因是?
我建立了一个新的sln,创建一个class library,叫做oldclass,里面的代码如下:
上面main函数的最后一句会抛出一个异常,说FileNotFoundException。
如果我改成用一个绝对路径,就没有问题:
问题是,这个sln的目录结构就是ConsoleApplication1下面有两个工程,一个是oldclass,一个是ConsoleApplication1。我在VS的IDE里面执行ConsoleApplication1的时候,其工作目录就是ConsoleApplication1\ConsoleApplication1对吧,那么我要找classLibrary应该就是向上一级目录加上oldclass这个目录名称,我在"我的电脑"里面看了也没有错的。为什么程序运行时就不性能?
难道我对于"当前工作目录"的理解不对吗?
------解决思路----------------------
string folder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var am = Path.Combine(folder, "oldclass.dll");
我建立了一个新的sln,创建一个class library,叫做oldclass,里面的代码如下:
namespace oldclass
{
public class oldclass
{
public static string method(string s)
{
return "返回结果" + s;
}
}
}
[code]
编译debug版的dll,然后,在同一个sln创建一个控制台程序,叫做consoleApplication1,有如下代码:
[code=csharp]
static void Main(string[] args)
{
//new Program().test();
foreach(Assembly a in AppDomain.CurrentDomain.GetAssemblies())
{
Console.WriteLine(a.FullName);
}
//如何得知当前的工作目录?
var am = Assembly.LoadFrom(@"..\oldclass\bin\Debug\oldclass.dll");//能否加载自己.dll,能否加载当前dll当中的class?
}
上面main函数的最后一句会抛出一个异常,说FileNotFoundException。
如果我改成用一个绝对路径,就没有问题:
var am = Assembly.LoadFrom(@"C:\Users\engineer\Documents\Visual Studio 2013\Projects\ConsoleApplication1\oldclass\bin\Debug\oldclass.dll");
问题是,这个sln的目录结构就是ConsoleApplication1下面有两个工程,一个是oldclass,一个是ConsoleApplication1。我在VS的IDE里面执行ConsoleApplication1的时候,其工作目录就是ConsoleApplication1\ConsoleApplication1对吧,那么我要找classLibrary应该就是向上一级目录加上oldclass这个目录名称,我在"我的电脑"里面看了也没有错的。为什么程序运行时就不性能?
难道我对于"当前工作目录"的理解不对吗?
------解决思路----------------------
string folder = Path.GetDirectoryName(Assembly.GetEntryAssembly().Location);
var am = Path.Combine(folder, "oldclass.dll");