C#从XAML文件创建模块目录

时间:2011-10-10 19:39:09

标签: c# module prism xamlreader

我在prism库的上下文中从xaml文件加载模块时遇到问题。 模块的xaml如下所示:

<Modularity:ModuleCatalog xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
         xmlns:sys="clr-namespace:System;assembly=mscorlib" 
         xmlns:Modularity="clr-namespace:Microsoft.Practices.Prism.Modularity;assembly=Microsoft.Practices.Prism">
<Modularity:ModuleInfoGroup InitializationMode="WhenAvailable">
    <Modularity:ModuleInfo Ref="file://HelloWorldModule.dll" ModuleName="HelloWorldModule" ModuleType="HelloWorldModule.Views.HelloWorldView, HelloWorldModule, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null" />
</Modularity:ModuleInfoGroup>

到目前为止,解析器找到了这个xaml,但它找不到HelloWorldModule.dll。 我在文档中找不到任何有用的东西,因为这些都是针对Silverlight的,但我的项目是一个WFP应用程序。

shell.exe的相对路径是:

\Projects\QFX_Shell\bin\Debug

,HelloWorldModule.dll的路径是:

\Projects\HelloWorldModule\bin\Debug

所以问题是&#34; Ref&#34;属性期望?它是HelloWorldModule.dll的绝对路径吗?

第二个问题是ModuleType属性应具有的值:

namespace HelloWorldModule.Views
{
  /// <summary>
  /// Interaction logic for HelloWorldView.xaml
  /// </summary>
  public partial class HelloWorldView : UserControl
  {
    public HelloWorldView()
    {
        InitializeComponent();
    }
  }
}

是否为类类型名称包含了命名空间?

ModuleType="HelloWorldModule.Views.HelloWorldView, HelloWorldModule...

接下来的问题是,HelloWorldModule.dll与Shell.exe位于同一文件夹中吗? 谢谢, 尔根

1 个答案:

答案 0 :(得分:1)

  1. 如果使用相对路径,则ref属性需要应用程序路径下方的路径,或绝对路径,这通常不起作用,因为在设计时无法知道安装文件夹。要让模块目录找到您的模块,最好将模块复制到应用程序目录并使用相对路径。
  2. 模块类型属性必须是模块dll中实现IModule接口的类型。
  3. 是的,必须包含名称空间。
  4. 见答案1
  5. 有关您的问题的更多建议,请查看 Prism 4.0 - 2010年11月手册的第4章模块化应用程序开发