C# 设计视图和运行时应用程序的应用程序/工作目录不同 我在Visual Studio 2010专业中开发了一个C窗口演示文稿基础(WPF)应用程序。我有一段代码,可以找到与可执行目录相关的目录。我还有一些其他代码,可以搜索该目录中以.png扩展名结尾的所有文件,并创建指向这些文件的完整文件路径列表,这些文件是绑定到列表框的数据

C# 设计视图和运行时应用程序的应用程序/工作目录不同 我在Visual Studio 2010专业中开发了一个C窗口演示文稿基础(WPF)应用程序。我有一段代码,可以找到与可执行目录相关的目录。我还有一些其他代码,可以搜索该目录中以.png扩展名结尾的所有文件,并创建指向这些文件的完整文件路径列表,这些文件是绑定到列表框的数据,c#,wpf,visual-studio-2010,working-directory,C#,Wpf,Visual Studio 2010,Working Directory,在调试模式下执行时,程序运行正常。问题是Visual Studio design视图无法在UserControl中显示ListBox。换句话说,它不能创建UserControl的实例,因为“调用的目标已引发异常”。事实证明,设计视图得到的目录与可执行文件使用的目录不同。具体地说,Visual Studio设计视图获得“C:\Documents and Settings\jdgoodw0\My Documents\Visual Studio 2010\Projects\ExampleDrawing

在调试模式下执行时,程序运行正常。问题是Visual Studio design视图无法在UserControl中显示ListBox。换句话说,它不能创建UserControl的实例,因为“调用的目标已引发异常”。事实证明,设计视图得到的目录与可执行文件使用的目录不同。具体地说,Visual Studio设计视图获得“C:\Documents and Settings\jdgoodw0\My Documents\Visual Studio 2010\Projects\ExampleDrawingTool”,运行时应用程序获得“C:\Documents and Settings\jdgoodw0\My Documents\Visual Studio 2010\Projects\ExampleDrawingTool\bin\Debug”。(我知道这一点,因为我输入了一些调试代码,将目录作为参数输出到异常。)

我用来获取应用程序/工作目录的代码是:

DirectoryInfo currentDirectory = new DirectoryInfo(Environment.CurrentDirectory);
我也尝试过这些方法,但没有成功:

DirectoryInfo currentDirectory = new DirectoryInfo(System.AppDomain.CurrentDomain.BaseDirectory);
DirectoryInfo currentDirectory = new DirectoryInfo(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location));
DirectoryInfo currentDirectory = new DirectoryInfo(System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location));
DirectoryInfo currentDirectory = new DirectoryInfo(System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName));

是否有一种方法可以获取可执行文件的目录(完整路径)(即在bin\Debug文件夹中),这样可执行文件和Visual Studio Design视图都将获得相同的路径?

您可以使用此代码获取当前程序集目录:

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

您可以使用以下代码获取当前程序集目录:

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

谢谢你的回答。我尝试了您的建议,可执行文件仍然有效,但是设计视图(通过异常参数)报告它得到的路径是:C:\Documents and Settings\jdgoodw0\Local Settings\Application Data\assembly\dl3\WW48Q9Y2.0VD\EMEQCJQM.C66,所以我仍然有相同的问题。这对您有效吗?我在发布模式WPF应用程序中测试了它,并返回了正确的目录。System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);我尝试使用System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().M‌​ainModule.FileName);它同样适用于可执行文件,但设计器仍然无法加载,因为它试图转到c:\Program Files\Microsoft Visual Studio 10.0谢谢您的回答。我尝试了您的建议,可执行文件仍然有效,但是设计视图(通过异常参数)报告它得到的路径是:C:\Documents and Settings\jdgoodw0\Local Settings\Application Data\assembly\dl3\WW48Q9Y2.0VD\EMEQCJQM.C66,所以我仍然有相同的问题。这对您有效吗?我在发布模式WPF应用程序中测试了它,并返回了正确的目录。System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().MainModule.FileName);我尝试使用System.IO.Path.GetDirectoryName(System.Diagnostics.Process.GetCurrentProcess().M‌​ainModule.FileName);它同样适用于可执行文件,但设计器仍然无法加载,因为它试图转到c:\Program Files\Microsoft Visual Studio 10.0