VSX包中自定义类型转换器的问题

时间:2010-10-15 09:40:37

标签: c# .net vsx

我有以下问题。我有MSVS解决方案,里面有三个项目。

  • 第一个项目是 VSX 项目女巫在其中显示带有属性网格的表单。
  • 第二个是典型的C#库项目,其自定义类型转换器类BooleanYesNoConverter继承自BooleanConverter。此转换器用于在属性网格中显示“是/否”,而不是“真/假”。
  • 第三个项目也是C#库项目,其中包含一个公共类,其中一个公共属性具有属性[TypeConverter(typeof(BooleanYesNoConverter))]

从第一个和第三个开始引用第二个项目。

当我们在调试模式下启动第一个项目(在VS Experimental hive中)并单击菜单时,插件会加载从第三个项目生成的程序集(在Assembly.LoadFrom的帮助下)并实例化我们的类(具有一个公共布尔属性)。然后它将此实例传递给propertyGrid.SelectedObject属性。属性网格显示公共属性,而是是/否在右侧​​显示True / False。

我在转换器的方法(和构造函数)中放置了断点,但似乎我们没有去那里。而不是自定义类型转换器,使用标准。

更有趣的是,如果我在第三个项目中放置BooleanYesNoConverter类(因此它将是我的类的一个程序集)属性网格显示正确的是/否变体。

提前感谢您的帮助!

1 个答案:

答案 0 :(得分:0)

上网冲浪我发现不仅我遇到了这样的问题。我在以下地方发现了类似的问题:

http://social.msdn.microsoft.com/Forums/en/vsx/thread/a04b45d2-1d0a-4cfc-a0f0-1d458b2d6e26

(您可以在我的评论中找到另一个链接)

我找到了适合(对我而言)的决定:我写了装配解析器。换句话说,我在插件的初始化方法中添加了以下代码:

    AppDomain.CurrentDomain.AssemblyResolve +=
    new ResolveEventHandler(LoadAssembly);

这个插件类的方法:

    private Assembly LoadAssembly(object sender, ResolveEventArgs e)
    {
        int commaIndex = e.Name.IndexOf(',');
        string fileName = e.Name.Substring(0, commaIndex) + ".dll";
        Assembly assembly = Assembly.LoadFrom(fileName);
        return assembly;
    }

现在工作正常。