Как подавить предупреждения компилятора от использования ссылок COM в проекте .NET - PullRequest
4 голосов
/ 20 июля 2009

Мы используем библиотеку типов служб Windows COM + (находится в C: \ Windows \ system32 \ COMSVCS.dll) для отслеживания процессов COM + на удаленной машине с помощью службы, написанной на C # 3.0 / .NET 3.5. Проблема, с которой я сталкиваюсь, заключается в том, что я получаю множество предупреждений от компилятора, которые выглядят примерно так:

хотя бы один из аргументов для 'IGetAppData.GetApps' не может быть маршаллировал маршалером во время выполнения. Поэтому такие аргументы будут передается как указатель и может потребовать небезопасный код для манипулирования.

Сгенерированная сигнатура функции взаимодействия для упомянутого выше метода:

void IGetAppData.GetApps(out uint nApps, IntPtr aAppData)

Поскольку выходные данные уже распределяются вручную в вызывающем коде (т. Е. С использованием Marshall.ReadInt32 и Marshall.PtrToStructure), есть ли способ подавления предупреждений такого типа?

Ответы [ 5 ]

4 голосов
/ 11 августа 2016

Добавьте эту строку в первую группу свойств вашего файла проекта:

<ResolveComReferenceSilent>True</ResolveComReferenceSilent>
2 голосов
/ 20 июля 2009

, так как в этом предупреждении нет номера, вы не можете подавить его с помощью #pragma, но вы можете использовать tlbimp , чтобы импортировать dll вне Visual Studio и использовать сгенерированную ссылку вместо того, чтобы позволить Visual Studio создавать ее.

1 голос
/ 20 июля 2009

Вы можете использовать значительно улучшенный, настраиваемый Импорт библиотек типов в управляемом коде для настройки сигнатур методов. Затем обратитесь к этой оболочке вместо исходной библиотеки COM в вашем проекте.

0 голосов
/ 10 августа 2011

Я смог решить эту проблему, указав ссылку на Interop.xxxx.dll вместо основной библиотеки DLL. В моем случае использование Interop.TaskScheduler.dll работает, тогда как taskschd.dll выдает мне предупреждение. Я проверил, используя Rebuild All, и предупреждение исчезло.

0 голосов
/ 20 июля 2009

Если все, что вам нужно, это скрыть предупреждения от отображения, вы можете использовать директиву # pragma warning . Это позволяет вам выборочно включать / отключать определенные предупреждения.

...