CA1405: базовые типы, относящиеся к типу видимых COM-клиенту, должны быть видимыми для COM
Товар | Значение |
---|---|
Идентификатор правила | CA1405 |
Категория | Microsoft.Interoperability |
Критическое изменение | DependsOnFix |
Причина
Видимый тип объектной модели компонента (COM) является производным от типа, который не отображается COM.
Описание правила
Когда видимый тип COM добавляет элементы в новую версию, он должен соблюдать строгие рекомендации, чтобы избежать нарушения com-клиентов, которые привязываются к текущей версии. Тип, невидимый для COM, предполагает, что он не должен следовать этим правилам управления версиями COM при добавлении новых членов. Однако если видимый тип COM является производным от невидимого типа COM и предоставляет интерфейс System.Runtime.InteropServices.ClassInterfaceType класса или ClassInterfaceType (по умолчанию), все общедоступные члены базового типа (если они не помечены как com-невидимые, которые будут избыточными) предоставляются COM. Если базовый тип добавляет новые члены в последующей версии, все COM-клиенты, которые привязываются к интерфейсу класса производного типа, могут нарушиться. Видимые типы COM должны быть производными только от видимых типов COM, чтобы снизить вероятность нарушения com-клиентов.
Устранение нарушений
Чтобы устранить нарушение этого правила, сделайте базовые типы COM видимыми или производным типом COM невидимым.
Когда лучше отключить предупреждения
Для этого правила отключать вывод предупреждений не следует.
Пример
В следующем примере показан тип, нарушающий это правило.
using System;
using System.Runtime.InteropServices;
[assembly: ComVisible(false)]
namespace InteroperabilityLibrary
{
[ComVisible(false)]
public class BaseClass
{
public void SomeMethod(int valueOne) {}
}
// This class violates the rule.
[ComVisible(true)]
public class DerivedClass : BaseClass
{
public void AnotherMethod(int valueOne, int valueTwo) {}
}
}
См. также
Обратная связь
https://aka.ms/ContentUserFeedback.
Ожидается в ближайшее время: в течение 2024 года мы постепенно откажемся от GitHub Issues как механизма обратной связи для контента и заменим его новой системой обратной связи. Дополнительные сведения см. в разделеОтправить и просмотреть отзыв по