2009-07-20 5 views
4

Wir verwenden die Windows COM + -Diensttypbibliothek (unter C: \ Windows \ system32 \ COMSVCS.dll) zum Verfolgen von COM + -Prozessen auf einem Remote Computer, der einen Dienst verwendet, der in C# 3.0/.NET 3.5 geschrieben wird. Das Problem, das ich begegnet bin ist, dass ich eine ganze Reihe von Warnungen vom Compiler immer bin, die in etwa wie folgt aussehen:So unterdrücken Sie Compilerwarnungen durch die Verwendung von COM-Referenzen in einem .NET-Projekt

Mindestens eines der Argumente für ‚IGetAppData.GetApps‘ nicht werden kann gemarshallte durch der Laufzeit Marshaller. Solche Argumente werden daher als Zeiger übergeben und erfordern möglicherweise unsafe Code zu manipulieren.

Die erzeugte interop Funktion Signatur für das oben erwähnte Verfahren ist:

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

Da der Ausgang bereits manuell in den Rufcode vermarshallten zu sein, ist (dh Marshall.ReadInt32 und Marshall.PtrToStructure verwendet wird), ist es eine Möglichkeit, diese Art von Warnungen unterdrücken?

+0

Mögliche Duplikat http://stackoverflow.com/questions/269063/lots-of-build-warnings-when-com-objects -activeds-or-msxml2-are-referenziert/1402834 # 1402834 –

Antwort

2

Da diese Warnung keine Nummer enthält, können Sie sie nicht mit #pragma unterdrücken, aber Sie können tlbimp verwenden, um die DLL außerhalb von Visual Studio zu importieren und den generierten Verweis zu verwenden, anstatt Visual Studio erstellen zu lassen.

-1

Wenn Sie nur die Warnungen ausblenden möchten, können Sie die #pragma warning Direktive verwenden. Dadurch können Sie bestimmte Warnungen selektiv aktivieren/deaktivieren.

+2

Ich habe keine ID, mit der ich leider spielen kann – jpoh

1

Sie können die stark verbesserte, anpassbare Type Library Importer in Managed Code verwenden, um die Methodensignaturen anzupassen. Dann verweisen Sie diesen Wrapper anstelle der ursprünglichen COM-Bibliothek in Ihrem Projekt.

0

Ich konnte dies lösen, indem Sie den Verweis auf Interop.xxxx.dll anstelle der Hauptdll zeigen. In meinem Fall funktioniert die Verwendung von Interop.TaskScheduler.dll, während tasschd.dll mich warnt. Ich habe überprüft, ob alle neu erstellt wurden und die Warnung ist weg.

+1

Ich denke, das liegt daran, dass die Konvertierung auf die Interop bereits stattgefunden hat, also gibt es keine weiteren Warnungen. Es gibt Methoden, die Ihnen zeigen, wie Sie diese Interopes mit tlbimp direkt erstellen, mit dem gleichen Effekt. –

4

Fügen Sie diese Zeile in der ersten Immobiliengruppe der Projektdatei:

<ResolveComReferenceSilent>True</ResolveComReferenceSilent> 
+0

Danke! Das funktionierte wie ein Zauber, um diese lästigen Warnungen zu entfernen. –

Verwandte Themen