it-swarm.com.de

Was macht stdole.dll?

Wir haben eine große C # (.net 2.0) -App, die unsere eigene C++ COM-Komponente und eine Drittanbieter-Fingerabdruckscanner-Bibliothek verwendet, auf die auch über COM zugegriffen werden kann. Wir sind auf ein Problem gestoßen, bei dem in der Produktion einige Ereignisse aus der Fingerabdruckbibliothek nicht in die C # -App gefeuert werden, obwohl Ereignisse aus unserer eigenen C++ - COM-Komponente ausgelöst wurden und einwandfrei empfangen wurden.

Bei Verwendung von MSINFO32 zum Vergleichen der geladenen Module eines funktionierenden Systems mit denen eines ausgefallenen Systems haben wir festgestellt, dass STDOLE.DLL nicht in der GAC war und daher nicht in den fehlerhaften Prozess geladen wurde.

Wenn Sie diese Datei in den GAC ziehen, werden Ereignisse aus der COM-Bibliothek für Fingerabdrücke zurückgegeben.

Was macht stdole.dll? Es ist 16k groß, also kann es nicht viel sein ... ist es eine Art Link zu einer anderen Bibliothek wie STDOLE32? Wie kommt es, dass seine Abwesenheit ein so seltsames Verhalten verursacht?

Wie verteilen wir stdole.dll? Dies ist eine XCOPY-Implementierungs-App, und wir verwenden die GAC nicht. Sollen wir es als Ressource packen und die System.EnterpriseServices.Internal.Publish.GacInstall verwenden, um sicherzustellen, dass es sich im GAC befindet?

38
rc1

Es scheint, dass stdole.dll eine primary Interop Assembly ist. Siehe Office 2003 Primary Interop Assemblies auf MSDN.

22
artur02

Dieses Problem wird auch hier besprochen: Warum fügt Visual Studio 2015 stdole.dll und Microsoft.AnalysisServices.AdomdClient.dll meinem Projekt hinzu?

Das Aktualisieren eines älteren Projekts auf VS 2015 hat dazu geführt, dass stdole.dll in diesem Fall in das Projekt aufgenommen wurde.

Wenn für die Bibliotheksreferenzierung die Option "Interop-Typen einbetten" in den Eigenschaften verfügbar ist, wird dies bevorzugt und die stdole.dll wird danach möglicherweise nicht benötigt. Setzen Sie einfach Embed Interop Types=true in den Eigenschaften der Referenz. 

Bibliotheken, die dies zulassen, umfassen die MS Office-Bibliotheken wie Office, Excel, Core. Ein Beispiel für einen, der dies nicht tut, ist Crystal Reports.

Hans Passanträt stark davon ab, die Einstellung Embed Interop Types=false hier: Was ist der Unterschied, wenn die Einstellung Interop-Typen einbetten in Visual Studio true und false ist?

3
Tony L.

Ich hatte das gleiche Problem. Ich habe gerade die Referenz aus der Anwendung gelöscht und neu kompiliert. Läuft alle Tests, die bestanden haben. Dann ohne DLL umverteilt und alles hat funktioniert.

Ich weiß nicht, wie ein Hinweis darauf überhaupt in das Projekt gekommen ist. Es ist eine Legacy-App, also muss es schon lange her sein.

Simon

1
Simon

In unserem Projekt wird IDispatch mithilfe von stdole.dll erstellt. Wir haben es in Objekt geändert und IDispatch entfernt, dann stdole aus Referenzen entfernt.

0
DimDim

In meinem Fall war dies ein alter, unbenutzter Verweis auf Office Word Interop ... aber das Entfernen war nicht ausreichend: Das Veröffentlichungsprofil hatte immer noch eine Zeile zum Kopieren von stdole.dll!

<File Include="bin/stdole.dll"> ...

Das Löschen dieser Zeile (gefunden mit "Suchen in Dateien") und das Löschen der Datei "stdole.dll" aus dem Ordner "bin" auf dem Remote-Server hat mein Problem behoben.

Hoffe das hilft jemand anderem.

0
Ruskin

Ich musste auch einen Bezug zu meinem Projekt für stdole hinzufügen. Obwohl ich keine Verweise darauf habe (es handelt sich um eine einfache Image-App), haben zwei unserer Benutzer Fehler erhalten, die fehlten. Es könnte sein, dass sie .net 2.0 nur dann ausführen, wenn dies eine 3.5-App ist. Ich habe herausgefunden warum.

Ich habe auch auf der Registerkarte Projekteigenschaften publiziert, Anwendungsdateien ausgewählt und dann den bereitgestellten Standard eingefügt. Hoffentlich klappt das.

0
Mike