Kompilieren / Einbetten von UserControls mit ASCX-Vorlagen zur Wiederverwendung in mehreren Webanwendungen

Ich bin hier auf einem richtigen Kopfkratzer ... und es scheint eines der frustrierendsten Themen von ASP.NET zu sein.

Ich habe eine Assembly, die viele benutzerdefinierte Linq-Elemente implementiert, die im Kern keine Webfunktionalität aufweisen. Ich habe eine zusätzliche Assembly, die diese Assembly um webspezifisches Verhalten erweitert.

Das webspezifische Verhalten wird mit einigen Benutzersteuerelementen geliefert, die in ASCX-Benutzersteuerelementen mit Vorlagen markiert sind.

Ich habe Probleme damit, diese Baugruppe schön fertigzustellen, sodass sie einfach für die Verwendung in anderen Anwendungen erneut bereitgestellt werden kann. Lassen Sie mich das durchgehen, was ich bisher versucht habe:

Kopieren der ASCX-Dateien in die konsumierende Webanwendung mithilfe von Buildereignissen.alles andere als ideal und ein wahrer Alptraum.Implementierte einen benutzerdefinierten VirtualPathProvider und bettete die ASCX-Vorlagen in der Assembly als eingebettete Ressourcen ein. Leider wird bei Verwendung der Register-Direktive in der konsumierenden Anwendung die Designer-Deklaration als UserControl erstellt, wobei ich eine Deklaration des tatsächlichen Steuerelementtyps benötigen würde.unvorhergesehen (typisch) und unerwünscht.Erstellt ein Webbereitstellungsprojekt zum Kompilieren der UserControls, aber die kompilierten Benutzersteuerelemente werden dann Teil einer anderen Assembly und stammen nicht mehr von den Klassendefinitionen in meiner Webassembly ab.Die Assembly muss sie abhängig vom Anforderungskontext instanziieren.

Nummer 1 ist also nur Mist, Nummer 2 gibt mir nicht die Unterstützung, die ich mir wünsche, und Nummer 3, mit der ich eine vernünftige Lösung finden werde:

Sammeln Sie alle Nicht-Kontrollklassen inApp_Code Bereiten Sie eine Factory - Klasse vor, die ein Objekt des gewünschten Steuerelementtyps mithilfe von Reflection erstellt, und gehen Sie davon aus, dass der reflektierte Typ in der Bereitstellungsausgabe vorhanden ist (dies wird hoffentlich durch das Vorhandensein von garantiert)ClassName Attribut in derControl Richtlinie).

Es gibt auch immer die andere Möglichkeit, die ASCX-Steuerelemente in benutzerdefinierte Steuerelemente umzuschreiben, aber im Moment haben wir nicht die Ressourcen, dies zu berücksichtigen, und wir haben keine Erfahrung damit, und sie funktionieren gut als Benutzersteuerelemente.

Fehlt mir etwas Offensichtliches, vielleicht viel Einfacheres, oder ist das nur absichtlich schwierig? Ich habe auf meinen Reisen zu diesem Thema Geschichten darüber gelesen, dass der ASP.NET-Kompilierungsprozess in seinem Design sehr unglücklich ist.

Antworten auf die Frage(1)

Ihre Antwort auf die Frage