ASP.NET MVC 5在项目之间共享bundle



我的解决方案下有3个项目:

  • 帐户
  • 管理

Account和Management是MVC 5应用程序。帐户位于IIS的根目录上(http://localhost/)管理作为一个应用程序(http://localhost/Management)。域是一个类库,所以我可以在它们之间共享数据库上下文。

我使用捆绑包来提供我的JS和CSS文件。以下是Account应用程序中的App_Start/BundleConfig.cs的片段。

public static void RegisterBundles(BundleCollection bundles)
{
bool developerMode = Environment.MachineName != "LIVE_MACHINE";
string libScriptsDirectory = "~/Public/scripts/lib/";
string libStylesDirectory = "~/Public/styles/lib/";
string[] libScripts = new string[]
{
libScriptsDirectory + (developerMode == true ? "vue-2.5.17.dev.js" : "vue-2.5.17.min.js"),
libScriptsDirectory + "vuetify-1.3.1.js",
libScriptsDirectory + "vue-resource-1.5.1.js",
libScriptsDirectory + "vue-snotify-3.2.1.js",
libScriptsDirectory + "moment-2.22.2.js"
};
string[] libStyles = new string[]
{
libStylesDirectory + "material-41.css",
libStylesDirectory + "font-awesome-4.7.0.css",
libStylesDirectory + "vuetify-1.3.1.css",
libStylesDirectory + "vue-snotify-3.2.1.css"
};
bundles.Add(new ScriptBundle("~/bundles/lib.min.js").Include(libScripts));
bundles.Add(new StyleBundle("~/bundles/lib.min.css").Include(libStyles));
BundleTable.EnableOptimizations = !developerMode;
}

这与Account应用程序中的@Scripts.Render("~/bundles/lib.min.js")非常配合,我甚至可以在Management应用程序中执行@Scripts.Render("/bundles/lib.min.js")。唯一的问题是,当我在开发环境中时,我想使用BundleTable.EnableOptimizations。这在Account应用程序下是可能的,因为当设置为false时,我得到了所有未绑定的JS和CSS文件,但Management应用程序不是这样,因为我没有引用虚拟路径,所以它总是检索绑定的版本。

我并不特别希望有两组相同的代码来做相同的事情。有没有办法让我的静态JS和CSS文件放在一个地方,并在两个应用程序中使用绑定来提供绑定的未绑定的文件?在我的理解范围内,捆绑包不允许绝对路径,所以我知道这不是一个选择。

我通过添加一个虚拟目录来解决这个问题,该目录指向我想要使用的JS和CSS文件的绝对路径。我把这个虚拟目录添加到每个应用程序中,所以/Lib/。。。工作和/管理/自由/。。。作品

最新更新