Implementierungstyp VSNET

Mit Hilfe des Implementierungstyps (ITyp) VSNET ist der Entwickler in der Lage, Bausteine, die als Klasse in einer Assembly (ITyp DLLCLR) oder als eigenständiger Prozess (ITyp EXECLR) mit einer .NET-kompatiblen Sprache implementiert werden, unter Kontrolle von Visual Studio auszuführen.

Die Infrastruktur überwacht hierbei Visual Studio und wartet, bis der Baustein sich registriert hat. Ab dem Punkt wird nur noch der Prozess überwacht, der den Register ausgeführt hat. Sobald der Unregister dann ausgeführt wird, wird auch die Überwachung dieses Prozesses eingestellt, und der Aufrufer wird durchgestartet.

Solution

Als Implementierungsspezifikation (ISpc) wird die Visual Studio Solution eingetragen, welche das Projekt für die Implementierung enthält: Implementierungsspezifikation für VSNET

Wird nur der Dateiname angegeben, also ohne Pfadangabe, wird der ComponentPath verwendet, um die Datei zu suchen, und um Visual Studio mit der gefundenen Solution Datei zu starten. Welche Version von Visual Studio gestartet wird, ist ersichtlich wenn im Windows Explorer für die Solution Datei in dem Kontextmenu unterhalb Öffnen mit den Eintrag Standardprogramm auswählen… angeklickt wird: Öffnen mit Standardmäßig wird das Programm Microsoft Visual Studio Version Selector gestartet. Dieser erkennt an Hand des Inhalts1) der Solution Datei, welche Version von Visual Studio gestartet werden soll.

Die Infrastruktur prüft vorher, ob bereits eine Instanz von Visual Studio2) läuft, die die Solution geladen hat. Wenn dies der Fall ist, wird diese Instanz von der Infrastruktur verwendet. Es wird eine Meldung eingeblendet, um auf diese Tatsache hinzuweisen: Meldung E001007

Eigenständiger Prozess (ITyp EXECLR)

Bausteine, die als eigenständiger Prozess (ITyp EXECLR) implementiert sind, können direkt in Visual Studio gestartet werden, indem bei den Projekteigenschaften auf dem Reiter Debug als Start Action Start Project ausgewählt wird:  Projekteigeschaften Eventuelle Parameter für das Programm können unter Command line arguments eingetragen werden.

Assemblies (ITyp DLLCLR)

Für Bausteine, die als Klasse in einer Assembly implementiert sind, wird ein Kopfprogramm benötigt. Dieser lädt das Assembly und kümmert sich um den Einstieg in der Klasse. Die Infrastruktur stellt hierfür einen Entrypoint DLLCLR_Invoke zur Verfügung, der diese Aufgabe übernimmt. Dieser Entrypoint befindet sich der DLL TeamWiSE.RuntimeCore.dll und wird über das Windows Utilityprogramm Rundll32.exe3) aufgerufen: Projekteigenschaften Es ist nicht notwendig für die TeamWiSE.RuntimeCore.dll den kompletten Pfadnamen anzugeben, wenn dieser über die Umgebungsvariable PATH gefunden werden kann. Der Entrypoint DLLCLR_Invoke bekommt als Argument die Implementierungsspezifikation für den Baustein übergeben, wie diese für den Implementierungstyp DLLCLR eingetragen ist (z.B. ALVOC001.dll;AL.VO.VO_D_REQUEST_TO_CONTEXT;C001;S). Die spezifizierte Assembly wird über den ComponentPath gesucht, wobei der Entrypoint DLLCLR_Invoke diesen vorübergehend um das Working Directory4) erweitert, damit eine Pfadangabe nicht benötigt wird5).

Implementierung mit generierte Basis-Assemblies

Wenn für die Implementierung generierte Basis-Assemblies verwendet werden, gibt es einige angepasste bzw. erweiterte Funktionalitäten in der Infrastrukur. Die Infrastruktur erkennt normalerweise an der Implementierungspezifikation, ob eine Funktionalität zur Verfügung stehen soll oder nicht. Dies ist bei dem Implmentierungstyp VSNET nicht möglich, da hier die Solution als Implementierungspezifikation eingetragen wird.

Damit diese Apassungen/Erweiterungen trotzdem auch beim Debuggen funktionieren, können neben der Solution auch Flags angebeben werden (<solution>;<flags>). Als Trennzeichen wird ein ; (Semikolon) verwendet. Wenn für die Implementierung generierte Basis-Assemblies verwendet werden, muss hier der Flag N eingetragen werden: Implementierungspezifikation (Flags)

1)
Für Details siehe hier
2)
Hierbei spielt die Version von Visual Studio keine Rolle. Die Solution kann in einer beliebigen Version von Visual Studio geladen sein
3)
Dieses befindet sich normalerweise in das Systemverzeichnis C:\Windows\System32. Auf eine 64-Bit Fassung von Windows muss aber das Programm aus C:\Windows\SysWO64 verwendet werden!
4)
Wenn nichts eingetragen ist, wird das Ausgabeverzeichnis für die gewählte Konfiguration verwendet. Wenn aber z.B. durch ein Custom Build Step die erstellte Assembly in einem anderen Verzeichnis kopiert wird, kann das Zielverzeichnis hier eingetragen werden.
5)
Diese Funktionalität wird erst ab Release 8.18 verwendet. Bis dahin muss eine Pfadangabe verwendet werden, um die richtige Assembly zu laden
faq:dotnet:ityp_vsnet · Zuletzt geändert: 08.11.2017 14:24

Copyright © 1992-2024 TeamWiSE Gesellschaft für Softwaretechnik mbH         Adressen |  Kontakt |  AGB |  Datenschutzerklärung |  Impressum