2008-10-19 16 views
0

Je voudrais utiliser un TypeCoverter pour régionaliser la sortie pour enums dans un assembly qui est un PIA chargé dans Excel.Aide sur l'utilisation de TypeConverters pour enums dans un assembly PIA Excel

Je peux l'exécuter et cela fonctionne sur un assembly dans un projet de test que j'ai créé avec un assembly explicitement référencé, cependant lors de l'exécution d'un projet qui a été construit comme un PIA Excel. Si je tente: _ public enum MyEnum Itema elementB fin ENUM

et dans le code mye = MyEnum.ItemA Convertisseur Dim Comme System.ComponentModel.TypeConverter = TypeDescriptor.GetConverter (mye)

Dans la fenêtre immédiate ? converter.ToString() goves « System.ComponentModel.EnumConverter »

alors que dans mon autre projet (également un ensemble fortement signé, mais fait référence directement à partir d'une fenêtre de stub nouveau projet de formulaire), je reçois

? converter.ToString "ClassLibrary1.LocalizedEnumConverter"

Il semble donc que LocalizedEnumConverter n'est pas lié à l'énumération - des idées? Est-ce dû à la manière dont Excel charge l'assemblage, et y a-t-il un moyen de le faire?

Répondre

0

Après une bonne quantité de creuser autour, j'ai trouvé la solution, cela fonctionnera pour un ensemble qui est chargé par ne peut pas être résolu:

Ajouter un gestionnaire pour la résolution de l'Assemblée:

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

puis pour gérer la résolution:

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 
0

Le convertisseur de type est-il dans la même DLL que l'énumération? TypeDescriptor doit être capable de résoudre les convertisseurs de type, les éditeurs de type UI, etc. - sinon il utilise les valeurs par défaut simples.

Je ne l'ai pas essayé quoi que ce soit sepcifically avec Excel, mais je me demande si ce n'est pas aussi simple que la résolution de montage ...

Si elle aide, vous pouvez utiliser l'événement AppDomain.AssemblyResolve pour personnaliser l'assemblage de chargement - mais c'est un domaine complexe ... Je l'éviterais à moins que ce ne soit absolument nécessaire.

+0

le convertisseur de type est dans le même dll, Je soupçonne qu'il est probablement vers le bas à la façon dont Excel/(office) charges PIA. – GalleySlave