| 

.NET C# Java Javascript Exception

2
In einem Kundenprojekt wurden mehrere Steuerelemente (Controls) für WinForm selbst entwickelt. Einige leiten sich von vorhanden Controls ab (Extended Controls) und einige setzen sich aus verschiedenen, vorhandenen Controls zusammen (Composite Controls).

Häufig kommt dabei ein benutzerdefiniertes Databinding zum Einsatz. Die Quelle dafür liegt in Basisbibliotheken, die nicht nur in den Controls sondern auch an anderen Stellen der darauf aufbauenden Applikation zum Einsatz kommen.

Aktuell befinden sich die Controls und auch die Basisbibliotheken in einer Solution.

Wenn die Controls von den Entwicklern verwendet werden können sollen, müssen verschiedene DLLs u.a. in einige Visual Studio Verzeichnisse kopiert werden und dann die Controls manuell der Toolbox hinzugefügt. Manchmal klappt das nicht. Während das Visual Studio zwar keine Fehlermeldung liefert, werden die Controls einfach nicht in der Toolbox angezeigt.

Hinzu kommt, dass sich ab und zu die Basisbibliothek ändert, was dazu führt, dass es zu Problemen mit den Controls kommt (obwohl die technisch gesehen gar nicht betroffen sind).

Ich würde gerne die Controls weitestgehend vom Rest entkoppeln und ein MSI zur Verfügung stellen, dass sich einfach installieren lässt, dabei die Controls in den GAC verfrachtet (so dass nicht mit den Visual Studio Verzeichnissen herumgespielt werden muss) und sie damit in der Toolbox ohne manuelle Frickelei verfügbar sind.

Bei neuen Versionen sollen die Entwickler einfach ein aktualisiertes MSI installieren können und fertig.

Hat jemand vielleicht eine Idee, wie das geht oder kann mich in die richtige Richtung lenken (Dokumentation, Tutorial, HowTo,...)?

UPDATE
Das Problem ist gelöst. Wer Details braucht, kann mich gerne anschreiben. Etwas weiter unten habe ich den Weg grob skizziert.
19.09.2011
Mephisztoe 111 4
3 Antworten
1
Hallo Mephisztoe,

versuchs mal mit dem Toolbox Control Installer . In der MSDN findest Du ein schönes HowTo zum Einstieg:
Gewusst wie: Packen und Installieren benutzerdefinierter Steuerelemente für die Toolbox.
GAC ist sicherlich eine gute Idee, wenn Du eigene ControlDesigner hast, sowieso die einzig praktikable. Im GAC kannst Du auch mehrere Versionen der Controls ablegen, wenn die Entwickler immer die neueste Version verwenden sollen (kompatible Schnittstelle!), ist ein Setup eine gute Lösung. Da kannst Du sehr differenziert arbeiten. Und das VSI (VS InhaltsInstaller) kannst Du sicher auch aus dem Setup heraus ansprechen.

Viel Erfolg,
Florian
19.09.2011
ffordermaier 8,4k 3 9
Ruft man das CreatePkgdef Utility per Hand auf, ist es aussagekräftiger, bestätigt aber leider das Problem:
CreatePkgDef : error : No Visual Studio registration attribute found in this assembly.
The assembly should contain an instance of the attribute Microsoft.VisualStudio.Shell.RegistrationAttribute defined in assembly Microsoft.VisualStudio.Shell.Immutable.10.0 version 10.0.0.0
Mephisztoe 19.09.2011
0
Hi Florian,

Das habe ich probiert und hatte damit leider keinen Erfolg. Ich konnte mich auf den Kopf stellen: Auch mit den einfachsten Beispielen bekam ich keine eigenen Controls in die ToolBox.

Dann habe ich auf MSDN ein Walkthrough gefunden, in dem das neue Project Template "Windows Forms ToolBox Control" aus dem Visual Studio 2010 SP1 SDK vorgestellt wird. Das Template ist nur für .NET 4.0 verfügbar.

Damit war es mir möglich, Controls zu erstellen, sogar mit Icons zu versehen und als .vsix in die ToolBox zu bekommen.

Einziger Haken:
Das klappt nur mit Projekten, die ebenfalls auf .NET 4.0 eingestellt sind.

Und hier liegt für mich der Hund begraben.
Das Kundenprojekt setzt auf .NET 3.5 auf. Sobald ich allerdings das Control-Projekt auf .NET 3.5 stelle, gibt es Probleme mit den Abhängigkeiten. Für die Registrierung der Controls in der ToolBox wird ein Verfahren verwendet, das ein RegistrationAttribute benötigt. Das Template liefert passend dazu ein ProvideToolBoxControlAttribute mit, das sich davon ableitet. Das Attribute stammt aus dem Namespace Microsoft.VisualStudio.Shell.Immutable.10.0. Das wiederum wird mit dem SDK mitgeliefert und wurde mit .NET 4.0 kompiliert.

Während des Build-Prozesses steuert das Template das Tool CreatePkgDef.exe an, welches voraussetzt, dass das Projekt ein oder mehrere RegistrationAttribute hat.

Stelle ich das Projekt nun auf .NET 3.5 um, entferne die Referenz zu ...Shell.Immutable... und ersetze sie durch ...Shell.dll aus dem 2.0 Verzeichnis des SDKs lösen sich zwar die Abhängigkeiten sauber auf, aber CreatePkgDef findet das RegistrationAttribute nicht mehr (vermutlich weil es nach der neueren Version schaut).

Falls hier noch jemand eine Idee hat, wäre das total klasse... ich vermute allerdings, dass die meisten beim Lesen nicht bis hierher gekommen sondern vorher ausgestiegen sind. :) (Wer will es ihnen verübeln.. das Thema wird wirklich stiefmütterlich behandelt!).
19.09.2011
Mephisztoe 111 4
Sorry, da weiß ich leider auch nicht weiter. Hast Du es mal nur über die Registry versucht, ohne diese Tools?
Ich hab noch einen MSDN Blog von Arron Marten gefunden, der kennt sich wohl sehr gut mit der Thematik aus. Vielleicht findest Du dort Hilfe.
http://blogs.msdn.com/b/aaronmar/
– Gast 20.09.2011
0
So. Ich habe das Problem gelöst.

Die Lösung würde zwar Microsoft nicht gefallen, aber unterm Strich haben die das Problem leider erst verursacht. Der ganze Kontext rund um das Projekttemplate für ToolBox Controls ist widersinnig umgesetzt. :(

Zwar bietet das SDK sowohl 2.0'er als auch 4.0'er Assemblies an, das CreatePkgDef.exe Utility wurde aber gegen die 4.0'er DLLs gelinkt. Ergebnis: Die Templates, die damit arbeiten funktionieren nicht für Projekte < .NET 4.0.

Das Resultat:
Ich habe mit dem JetBrains dotPeek Decompiler den Quellcode von CreatePkgDef.exe eingesehen und ein neues Consolen-Projekt erstellt, indem ich die Sourcen 1:1 rübergezogen habe. Dieses Projekt habe ich gegen die 2.0'er Version der Microsoft.VisualStudio.Shell.dll gelinkt und bekam so eine .exe, die auch funktioniert, wenn das Projekt aus dem ToolBox Controls Template mit .NET 3.5 kompiliert wird.

Das war jetzt stark zusammengefasst. Aber sollte jemand mal ein ähnliches Problem haben, kann er sich gerne an mich wenden.
20.09.2011
Mephisztoe 111 4

Stelle deine Visual-studio-Frage jetzt!
TOP TECHNOLOGIES CONSULTING GmbH