У меня есть сгенерированный WSDL класс
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.ServiceModel", "4.0.0.0")]
public partial class FVZServicesClient : System.ServiceModel.ClientBase<FVZScanningDocumentInfo.FVZServices.FVZServices>, FVZScanningDocumentInfo.FVZServices.FVZServices {
...
}
Мне нужно предоставить библиотеку, которая используется в VB6.Я использую интерфейс COM, который использует вышеупомянутый класс.
Когда я регистрирую сборку с помощью
regasm MyAssembly.dll /tlb:MyAssembly.tlb
, я получаю сообщение об ошибке
Утилита регистрации сборок Microsoft .NET Framework версии 4.7.3062.0 для Microsoft .NETFramework Framework 4.7.3062.0 Copyright (C) Microsoft Corporation.Все права защищены.
Типы успешно зарегистрированы. Обработка предупреждений экспортера библиотеки типов 'MyAssembly.FVZServices.FVZServicesClient, MyAssembly'.Предупреждение: экспортер библиотеки типов обнаружил тип, производный от универсального класса и не помеченный как [ClassInterface (ClassInterfaceType.None)].Интерфейсы классов не могут быть выставлены для таких типов.Попробуйте пометить тип с помощью [ClassInterface (ClassInterfaceType.None)] и предоставить явный интерфейс в качестве интерфейса по умолчанию для COM с помощью атрибута ComDefaultInterface.Сборка экспортирована в 'C: \ Users \ MyName \ Documents \ ScanLibrary \ Packet \ MyAssembly.tlb', и библиотека типов была успешно зарегистрирована
Когда я добавляю атрибут [ClassInterface(ClassInterfaceType.None)]
, как предложено для FVZServicesClientЯ все еще получаю то же сообщение об ошибке в следующий раз, когда я попробую regasm.Я знаю, что сгенерированный код может быть перезаписан в любое время, но я проверил с помощью DotPeek, что атрибут ClassInterface все еще был в скомпилированном коде.
Еще одна вещь, которую я попробовал, состояла в том, чтобы создать частичный класс FVZServicesClient с атрибутом ClassInterface.Я также пометил интерфейс по умолчанию с COMDefaultInterface, как следует из сообщения.Результат был таким же.Добавление атрибута [ComVisible(false)]
для FVZServicesClient также не помогло.
Когда на библиотеку ссылаются в VB6, компиляция приводит к ошибке: «Пользовательский тип не определен».
Как я могу исключить FVZServicesClient из интерфейса COM?