【问题标题】:Application / Working Directory is not the same for the Design View and for the runtime application设计视图和运行时应用程序的应用程序/工作目录不同
【发布时间】:2013-07-24 19:07:04
【问题描述】:

我正在 Visual Studio 2010 Professional 中开发 C# Windows Presentation Foundation (WPF) 应用程序。我有一段代码可以找到一个相对于可执行目录的目录。我还有一些其他代码可以在该目录中搜索以扩展名 .png 结尾的所有文件,并创建这些文件的完整文件路径列表,这些文件是数据绑定到 ListBox 的。

程序在调试模式下运行良好。问题是 Visual Studio 设计视图无法在 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\项目\ExampleDrawingTool\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 设计视图都将获得相同的路径?

【问题讨论】:

    标签: c# wpf visual-studio-2010 working-directory


    【解决方案1】:

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

    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
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-05-20
    • 1970-01-01
    • 2021-06-30
    • 2012-07-24
    • 1970-01-01
    • 1970-01-01
    • 2013-11-04
    相关资源
    最近更新 更多