Drücke „Enter”, um zum Inhalt zu springen.

Contrulutil.exe – Deregistrierung eines Controls bzw. einer Assembly funktioniert nicht

Sollte mal jemand eine solche Fehlermeldung (Could not load file or assembly ‚ControlName‘ or one of its dependencies. The system cannot find the file specified.) beim Aufrufen des Designers erhalten, so kann das an einem fehlerhaften (Custom) Control liegen (zumindest war das bei mir der Fall):

Ich habe diese Meldung erhalten, nachdem ich ein CustomControl auf dem K2-Server registriert hatte. Allerdings handelte es sich dabei um ein ZWEITES Control, das einer bereits auf dem Server registrierten Assembly hinzugefügt wurde.

Genau genommen war die Ursache eine fehlerhafte Definition in der XML-Datei, die die Eigenschaften des Controls beschreibt. Ich hatte versehentlich bei der Eigenschaft FullName statt den Namen der Assembly den Klassennamen angegeben 🙁

Dieser Fehler führte dazu, dass der oben genannte Server-Error auftrat.

Nun war das Problem, dass das erste Control dieser Assembly (als die fehlerhafte XML-Definition noch nicht Teil der Assembly war ;-)) bereits in einer View verwendet wurde. Das fehlerhafte NEUE Control der Assembly führte nach der Registrierung direkt zu dem o.a. Fehler.
Zuerst hatte ich versucht die komplette Assembly zu deregistrieren. Das hat nicht funktioniert, weil diese ja bereits in einer View verwendet wurde.
Einige weitere Versuche die Controls zu deregistrieren schlugen fehl (https://help.k2.com/onlinehelp/K2smartforms/DevRef/4.7/default.htm#Using_controlutil.exe.html?Highlight=controlutil)

Ich erhielt jeweils diese Fehlermeldung:

DeregisterControlType Failed: ControlTypeHasInstances,MyCustomControl
System.Data.SqlClient.SqlException (0x80131904): ControlTypeHasInstances,MyCusto
mControl
   at SourceCode.Hosting.Client.BaseAPI.BaseAPIConnection.RemoteCall(String Type
Name, String MethodName, Object[] Parameters, Boolean[] NullList, MarshalMessage
Type CallType)
   at SourceCode.Hosting.Client.BaseAPI.BaseAPI.RemoteSessionCall(String TypeNam
e, String MethodName, Object[] Parameters, Boolean[] NullList)
   at SourceCode.Forms.Management.FormsManager.DoSessionCall(String method, Obje
ct[] parameters, Boolean[] nullList)
   at SourceCode.Forms.Management.FormsManager.DeleteControlType(String name, St
ring replaceWith)
   at SourceCode.Forms.Controls.Web.SDK.Installer.Program.DeregisterControlTypes
(String assemblyName, String replaceWith)
ClientConnectionId:6ded3a46-2db8-4c96-a549-1e15a847eb7b
Error Number:50000,State:1,Class:15

Erst die Ersetzung des fehlerhaften Controls durch ein DataLabel brachte Erfolg (eigentlich ein wenig verwunderlich, da ich das fehlerhafte Control noch nicht verwendet hatte, sondern lediglich ein anderes (funktionierendes) Control der gleichen Assembly)

–> controlutil deregister -control:LHTabControl -replaceWith:DataLabel
(Danke an tin, der in der Community mit dem DataLabel den passenden Vorschlag hatte)

Hier der Link zum Community-Beitrag: http://community.k2.com/t5/K2-blackpearl/Cannot-de-register-custom-control/m-p/95041#M30595

Ein weiterer Beitrag zur gleichen Thematik, aber einer anderen Lösung (die bei mir allerdings nicht funktioniert hatte) findest Du hier: http://community.k2.com/t5/K2-blackpearl/Cannot-de-register-custom-control/m-p/70494#M20215)