Помогите с использованием TypeConverters для перечислений в сборке Excel PIA - PullRequest
0 голосов
/ 19 октября 2008

Я хотел бы использовать TypeCoverter для регионализации вывода перечислений в сборке, которая является PIA, загруженной в Excel.

Я могу запустить это, и оно работает на сборке в тестовом проекте, который я создал с помощью явно указанной сборки, однако при запуске проекта, созданного как Excel PIA. Если я попробую: _ публичное перечисление MyEnum Itema ItemB конец enum

и в коде myE = MyEnum.ItemA Dim преобразователь As System.ComponentModel.TypeConverter = TypeDescriptor.GetConverter (myE)

В ближайшем окне ? converter.ToString () goves "System.ComponentModel.EnumConverter"

тогда как в моем другом проекте (также со строго подписанной сборкой, но на который ссылаются непосредственно из недавно созданного проекта формы окон-заглушек), я получаю

? converter.ToString "ClassLibrary1.LocalizedEnumConverter"

так что похоже, что LocalizedEnumConverter не привязан к перечислению - есть идеи? Это из-за способа, которым Excel загружает сборку, и есть ли способ это сделать?

Ответы [ 2 ]

0 голосов
/ 27 октября 2008

После большого количества копаний я нашел решение, это будет работать для сборки, которая не может быть решена:

Добавить обработчик для резолюции Ассамблеи:

    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
0 голосов
/ 19 октября 2008

Является ли преобразователь типа в той же dll, что и enum? TypeDescriptor должен иметь возможность разрешать преобразователи типов, редакторы типов пользовательского интерфейса и т. Д., Иначе он использует простые значения по умолчанию.

Я ничего не пробовал в Excel отдельно, но мне интересно, не так ли просто, как разрешение сборки ...

Если это поможет, вы можете использовать событие AppDomain.AssemblyResolve для настройки загрузки сборки - но это сложная область ... Я бы ее избежал, если бы в этом не было крайней необходимости.

...