Wie erstelle ich einen ASP.NET MVC-Bereich als Plugin-DLL?

Hier ist, was ich erreichen möchte, ich möchte Bereiche von ASP.NET MVC als reine einzelne DLL trennen.

Blog.DLLForums.DLLFAQ.DLL

Jeder von ihnen ist ein einzelner ASP.NET MVC-Bereich mit eigenen Standard-CSHTML- oder ASPX-Seiten. Das Installieren, Migrieren und Verwalten vieler Seiten, einschließlich Ressourcen, Java-Skripten usw., ist auf lange Sicht ein echtes Problem. Da sich die meisten davon kaum ändern werden.

Meine endgültige Website wird so aussehen.

\MvcApplication
   \bin
      \MvcApplication.bin
      \Blog.dll
      \Forums.dll
   \Controllers
      \..
   \Models
      \..
   \Views
      \..
   \Global.asax
   \Web.config

Ohne etwas hinzuzufügen, einfach Blog.dll löschen, sollte meine Anwendung / blog und alle seine Seiten unterstützen. Wenn ich etwas anpassen möchte, kann ich einen Bereich hinzufügen und nur cshtml-Seiten hinzufügen.

\MvcApplication
   \bin
      \MvcApplication.bin
      \Blog.dll
      \Forums.dll
   \Areas
      \Blog
          \Views
              \Shared
                  \BlogLayout.cshtml <-- this will override the look
   \Controllers
      \..
   \Models
      \..
   \Views
      \..
   \Global.asax
   \Web.config

Dies hilft bei der Wiederverwendung von ASP.NET Area Plugins, indem die DLL einfach in den Ordner bin abgelegt wird. Die Datei web.config muss möglicherweise geändert werden. Höchstwahrscheinlich werden die Konfigurationswerte jedoch in der Datenbank gespeichert, und es wird nur die Verbindungszeichenfolge "Entity Framework" in der Datei web.config benötigt.

Meine Herausforderungen (Fragen)

Ist es möglich? Es sieht sicher so aus, aber wird es irgendwelche Probleme mit der Reflektion / Erlaubnis geben?Wie binde ich cshtml / aspx-Ansichten in eine DLL ein? Wahrscheinlich kompilierte Versionen? Ich habe ein paar auf Textvorlagen basierende View Engines auf Codeplex gesehen, bin aber ein wenig verwirrt darüber, wie man sie tatsächlich verwendet.Und wie kann ich ViewEngine dazu bringen, zuerst zu prüfen, ob eine physische Verzeichnisdatei vorhanden ist oder nicht, und dann in der DLL selbst nach cshtml / aspx als Ressourcendatei zu suchen?

Antworten auf die Frage(3)

Ihre Antwort auf die Frage