投稿されたアイデアをhereに変更し、MVC3で作業する。かなり速くて簡単でした。唯一の小さな欠点は、共有ビューが埋め込まれたリソースである必要があり、したがってコンパイルされる必要があることです。
共有ビュー(.cshtml、.vbhtmlファイル)をライブラリプロジェクトに配置します。 (私はこのプロジェクトでいくつかの共有コントローラも持っています)アプリケーションから_Layout.cshtmlを使用する場合は、その共有ビューをポイントする_ViewStart.cshtmlを必ず含めてください。
ライブラリプロジェクトでは、すべてのビューのビルドアクションプロパティを埋め込みリソースに設定します。
ライブラリプロジェクトでは、ビューの内容をtmp/Viewsディレクトリに書き込む次のコードを追加します。
。私はエイドリアンのStreamToFileライターを使用してい
public class EmbeddedResourceViewEngine : RazorViewEngine
{
public EmbeddedResourceViewEngine()
{
ViewLocationFormats = new[] {
"~/Views/{1}/{0}.aspx",
"~/Views/{1}/{0}.ascx",
"~/Views/Shared/{0}.aspx",
"~/Views/Shared/{0}.ascx",
"~/Views/{1}/{0}.cshtml",
"~/Views/{1}/{0}.vbhtml",
"~/Views/Shared/{0}.cshtml",
"~/Views/Shared/{0}.vbhtml",
"~/tmp/Views/{0}.cshtml",
"~/tmp/Views/{0}.vbhtml"
};
PartialViewLocationFormats = ViewLocationFormats;
DumpOutViews();
}
private static void DumpOutViews()
{
IEnumerable<string> resources = typeof(EmbeddedResourceViewEngine).Assembly.GetManifestResourceNames().Where(name => name.EndsWith(".cshtml"));
foreach (string res in resources) { DumpOutView(res); }
}
private static void DumpOutView(string res)
{
string rootPath = HttpContext.Current.Server.MapPath("~/tmp/Views/");
if (!Directory.Exists(rootPath))
{
Directory.CreateDirectory(rootPath);
}
Stream resStream = typeof(EmbeddedResourceViewEngine).Assembly.GetManifestResourceStream(res);
int lastSeparatorIdx = res.LastIndexOf('.');
string extension = res.Substring(lastSeparatorIdx + 1);
res = res.Substring(0, lastSeparatorIdx);
lastSeparatorIdx = res.LastIndexOf('.');
string fileName = res.Substring(lastSeparatorIdx + 1);
Util.SaveStreamToFile(rootPath + fileName + "." + extension, resStream);
}
}
は、hereを発見しました。アプリケーションのGlobal.asax.csで
。カーソンヘリックの優れた投稿に
public static void RegisterCustomViewEngines(ViewEngineCollection viewEngines)
{
//viewEngines.Clear(); //This seemed like a bad idea to me.
viewEngines.Add(new EmbeddedResourceViewEngine());
}
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
RegisterRoutes(RouteTable.Routes);
RegisterCustomViewEngines(ViewEngines.Engines);
}
私はlos techiesの投稿を見ました。私はそれが人々のためにうまくいくと確信していますが、それは私が必要とするもののために全面的な過剰です。バスと他の構成とのメッセージングは、私に重い手渡しを受けているようです。 Razorビューのコンパイルはビュー上の1つのプロパティ設定です(ただし、すべてのビューに適用されます)。 – blu