我想使用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加载程序集的方式,有没有办法解决这个问题?
答案 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