Hei,
ich habe mir die Tage mal mehr .net 5 angeschaut (komme hauptsächlich aus dem .net Framework Bereich).
Nun ist mir aufgefallen, dass die Bereitstellung einer COM-DLL gar nicht mehr so leicht ist, wie mit dem .net Framework. Dort war es ja hauptsächlich die ComVisible in dem Assembly auf true zu setzen und die dll dann über windows zu registrieren.
Wie ist das nun in .Net 5? Wie kann ich hier Klassen für zB. andere Tools bereitstellen? Also für .Net Projekte aber auch außerhalb des C# Bereiches.
Vielen Dank.
Hi,
das ist eigentlich ausführlich dokumentiert; im Endeffekt wurde das ganze Thema COM deutlich einfacher und optimiert.
Verfügbarmachen von .NET Core-Komponenten in COM
Wenn es Dir um das Thema COM Bibliotheken also TLBs geht; das gibts in der neuen .NET Welt nicht mehr.
Also für .Net Projekte aber auch außerhalb des C# Bereiches.
Mir unklar, was Du damit meinst, weil .NET ist die Runtime und C# nur eine Sprache.
"Klassen" bereitstellen: kommt drauf an, was Du machen willst.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Moin,
danke erstmal für deine Antwort. Ich muss zugeben, ist bisschen schlecht beschrieben was ich meine.
Mein Vorhaben (welches in .net Framework 4.8 bereits gut lief):
Ich hatte eine dll, welche ich über COM erreichbar machen konnte.
Die darin enthaltenen Klassen und Funktionen wurden in anderen .Net Framework Projekten, aber auch in externen Tools genutzt.
In einem externen Tool werden zB. Events mit Vbs geschrieben und ich konnte so dennoch die Klassen aus meiner DLL nutzen. Optimal, da einheitlich und leicht zu pflegen.
DLL registrieren ging eben auch schon auf dem Server, allerdings kann ich mit VBs das Objekt nicht erstellen. (In VBs: createObject(namespace.classname)
Und warum kannst Du das nicht erstellen? Vorgehen? Errors? Meldungen?
Solltest Du mit VBs "VBScript" meinen und dann in Office einsetzen wollen, so sei Dir der Hinweis nicht vorenthalten, dass Microsoft seit >10 Jahren aktiv wirbt, das nicht mehr zutun, sondern JavaScript zu verwenden.
JavaScript-API-Referenzdokumentation für Office - Office Add-ins
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Registriert wurde die DLL hiermit:
C:\Windows\system32\regsvr32.exe "C:\\net5.0\NetComClass.comhost.dll"
und einmal hiermit
C:\Windows\SysWOW64\regsvr32.exe "C:\\net5.0\NetComClass.comhost.dll"
Fehler beim Aufruf:
ActiveX-Komponente kann kein Objekt erstellen:"NetComClass.Server"
COM funktioniert mit .NET Core und .NET5+, aber Active X IIRC nicht. Active X ist tot.
Daher auch mein Hinweis im letzten Beitrag.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code
Habe das Problem behoben.
Habe das Projekt nochmal mit "dotnet publish -r win-x86 -c Release" erstellt und diese dann registriert.
So konnte ich es dann ausführen.
Problem lag denke daran, dass das externe Tool nur mit 32bit arbeiten kann.
Deswegen gibts das Tool als x86 und x64 Variante; jeweils im passenden Unterordner.
Gleiches gilt auch für regasm.
- performance is a feature -
Microsoft MVP - @Website - @AzureStuttgart - github.com/BenjaminAbt - Sustainable Code