如何禁止在.NET项目中使用COM引用来抑制编译器警告

jpo*_*poh 4 c# interop marshalling

我们正在使用Windows COM +服务类型库(位于C:\ Windows \ system32 \ COMSVCS.dll)来跟踪使用C#3.0 / .NET 3.5编写的服务的远程计算机上的COM +进程。我遇到的问题是,我从编译器中收到了很多警告,这些警告看起来类似于以下内容:

运行时封送程序无法封送“ IGetAppData.GetApps”的参数之一。因此,此类参数将作为指针传递,并且可能需要使用不安全的代码进行操作。

为上述方法生成的互操作函数签名为:

void IGetAppData.GetApps(out uint nApps, IntPtr aAppData)
Run Code Online (Sandbox Code Playgroud)

由于输出已经在调用代码中被手动编组(即使用Marshall.ReadInt32Marshall.PtrToStructure),有没有办法抑制这些类型的警告?

Igo*_*nko 5

将此行添加到项目文件的第一个属性组中:

<ResolveComReferenceSilent>True</ResolveComReferenceSilent>
Run Code Online (Sandbox Code Playgroud)


Sha*_*men 2

由于该警告没有数字,因此您无法使用 #pragma 抑制它,但您可以使用tlbimp在 Visual Studio 外部导入 dll 并使用生成的引用,而不是让 Visual Studio 创建它。