我们使用Windows COM +服务类型库(位于C:\ Windows \ system32 \ COMSVCS.dll)使用C#3.0 / .NET 3.5编写的服务跟踪远程计算机上的COM +进程。我遇到的问题是我从编译器中得到了一大堆警告,如下所示:
至少有一个论点 'IGetAppData.GetApps'不可能 由运行时封送器封送。 因此,这些论点将是 作为指针传递,可能需要 操纵不安全的代码。
上述方法生成的互操作函数签名是:
void IGetAppData.GetApps(out uint nApps, IntPtr aAppData)
由于输出已经在调用代码中手动编组(即使用Marshall.ReadInt32
和Marshall.PtrToStructure
),是否有办法抑制这些类型的警告?
答案 0 :(得分:4)
在项目文件的第一个属性组中添加此行:
<ResolveComReferenceSilent>True</ResolveComReferenceSilent>
答案 1 :(得分:2)
由于该警告没有数字,您无法使用#pragma来抑制它,但您可以使用tlbimp在Visual Studio外部导入dll并使用生成的引用,而不是让Visual Studio创建它。
答案 2 :(得分:1)
您可以尝试使用经过大幅改进,可自定义的Type Library Importer in Managed Code来自定义方法签名。然后引用此包装器而不是项目中的原始COM库。
答案 3 :(得分:0)
我能够通过将引用指向Interop.xxxx.dll而不是主dll来解决这个问题。在我的情况下使用Interop.TaskScheduler.dll工作,而taskschd.dll给我警告。我使用Rebuild All进行了验证,警告消失了。
答案 4 :(得分:-1)
如果您只想隐藏警告,则可以使用#pragma warning指令。这允许您有选择地启用/禁用特定警告。