帮助在Excel PIA程序集中使用TypeConverters进行枚举

时间:2008-10-19 14:11:31

标签: .net excel pia

我想使用TypeCoverter来区分输出加载到Excel中的PIA程序集中的枚举。

我可以运行它,它适用于我使用显式引用的程序集创建的测试项目中的程序集,但是在运行已构建为Excel PIA的项目时。如果我尝试:  _ public enum MyEnum     意达     ItemB 结束枚举

并在代码中 myE = MyEnum.ItemA Dim converter As System.ComponentModel.TypeConverter = TypeDescriptor.GetConverter(myE)

在即时窗口中 ? converter.ToString()goves “System.ComponentModel.EnumConverter”

而在我的其他项目中(也是一个强签名的程序集,但直接从新创建的存根窗口表单项目引用),我得到了

? converter.ToString “ClassLibrary1.LocalizedEnumConverter”

所以看起来LocalizedEnumConverter没有绑定到枚举 - 任何想法?这是因为Excel加载程序集的方式,有没有办法解决这个问题?

2 个答案:

答案 0 :(得分:0)

类型转换器和enum在同一个dll中吗? TypeDescriptor必须能够解析类型转换器,UI类型编辑器等 - 否则它使用简单的默认值。

我没有尝试过任何与Excel相关的东西,但我想知道它是否不像装配分辨率那么简单......

如果有帮助,您可以使用AppDomain.AssemblyResolve事件来自定义装配加载 - 但这是一个复杂的区域......除非绝对必要,否则我会避免使用它。

答案 1 :(得分:0)

经过大量挖掘后,我找到了解决方案,这对于加载的程序集无法解决:

为Assembly Resolution添加处理程序:

    Dim currentDomain As AppDomain = AppDomain.CurrentDomain
    AddHandler currentDomain.AssemblyResolve, AddressOf AssemblyResolve_EventHandler

然后处理决议:

Private Function AssemblyResolve_EventHandler(ByVal sender As Object, ByVal e As System.ResolveEventArgs) As System.Reflection.Assembly
    Dim asm() As System.Reflection.Assembly = System.AppDomain.CurrentDomain.GetAssemblies()

    For i As Integer = 0 To asm.Length
        If asm(i).FullName = e.Name Then
            Return asm(i)
        End If
    Next
    Return Nothing
End Function