2010-10-15 28 views
0

我有以下问题。我有MSVS解决方案,其中有三个项目。VSX软件包中定制类型转换器的问题

  • 第一个项目是VSX项目巫显示了它在属性网格形式。
  • 其次是典型的C#库项目,自定义类型转换器类BooleanYesNoConverter继承自BooleanConverter。该转换器用于在属性网格中显示是/否,而非True/False。
  • 第三个项目也是C#库项目包含与具有属性[TypeConverter(typeof(BooleanYesNoConverter))]

有来自第一和第三到第二个项目引用一个公共财产公开课。当我们以调试模式(VS实验配置单元)启动第一个项目并点击菜单时,插件从第三个项目(借助于Assembly.LoadFrom)加载生成的程序集并实例化我们的类(使用一个公共布尔属性) 。然后它将此实例传递给propertyGrid.SelectedObject属性。属性网格显示公共属性,但是是/否在右侧​​显示True/False。

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

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

非常感谢您的帮助!

+0

最近我找到了这个链接(http://social.msdn.microsoft.com/Forums/en-US/vsx/thread/9d5a647e-31b1-418d-8a16-a171129a3aec/)。这个人也遇到了同样的问题。有建议将自定义转换器放入GAC,但我不想这样做,因为此转换器非常针对项目。 – Dima 2010-10-15 10:54:01

回答

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; 
    } 

现在它工作正常。