如何在设计时从我的WPF应用程序获取应用程序的目录?

luv*_*ere 4 .net c# wpf working-directory

如何在设计时从我的WPF应用程序获取应用程序的目录我需要在设计时访问应用程序当前目录中的资源,而我的XAML正在设计器中显示.我无法在设计时使用此问题中指定的解决方案,System.IO.Path.GetDirectoryName(Process.GetCurrentProcess().MainModule.FileName)System.Reflection.Assembly.GetExecutingAssembly().Location指向IDE的位置(Visual Studio ... Common7或其他东西).

根据要求进一步明确我的目标:我想在设计时访问数据库表并显示该数据的图形.设计是在Visual Studio 2008中完成的,所以我需要的是针对特定问题的非常具体的解决方案,即获取我的应用程序的程序集目录.

Ray*_*rns 6

从您的描述中可以看出,您的代码实际上是在Visual Studio中的WPF Designer中运行,例如,它是用于设计的自定义控件库的一部分.

在这种情况下,Assembly.GetEntryAssembly()返回null,但以下代码获取应用程序目录的路径:

  string applicationDirectory = (
    from assembly in AppDomain.CurrentDomain.GetAssemblies()
    where assembly.CodeBase.EndsWith(".exe")
    select System.IO.Path.GetDirectoryName(assembly.CodeBase.Replace("file:///", ""))
    ).FirstOrDefault();
Run Code Online (Sandbox Code Playgroud)

以下步骤可用于演示VS.NET 2008的WPF Designer工具中的这些工作:

  1. 将此代码放在"WPF自定义控件库"或"类库"项目中
  2. 添加读取数据库所需的任何代码并返回显示的数据(在我的情况下,我只是将应用程序目录本身作为字符串返回)
  3. 从您正在设计的项目中引用库项目
  4. 使用XAML文件中的自定义控件或类来填充DataContext或以其他方式向UI提供数据(在我的示例中,我使用x:Static绑定DataContext)
  5. 使用"Windows Presentation Foundation Designer"编辑该XAML文件,只需双击即可完成,除非您更改了默认编辑器,在这种情况下使用"打开方式..."

当您按照这些步骤操作时,您正在查看的对象将在运行时和设计时以相同的方式填充数据库中的数据.

还有其他方案可以使用相同的技术,并且根据您的需要还有其他可用的解决方案.如果您的需求与我上面假设的不同,请告诉我们.例如,如果您正在编写VS.NET加载项,那么您将处于完全不同的球类游戏中.

  • 也不适用于VS 2013中的设计时间 (4认同)
  • 在Visual Studio 2010之后不再有效. (3认同)