项目之间的ASP.NET MVC 5共享包

时间:2018-10-24 18:25:22

标签: c# asp.net asp.net-mvc iis bundling-and-minification

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

  • 帐户
  • 管理

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

我正在使用捆绑包投放我的JS和CSS文件。以下是“帐户”应用程序中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;
}

@Scripts.Render("~/bundles/lib.min.js")(在“帐户”应用程序中)可以很好地工作,我什至可以在“ Management”(管理)应用程序中进行@Scripts.Render("/bundles/lib.min.js")。唯一的问题是在开发环境中时,我想使用BundleTable.EnableOptimizations。在“帐户”应用程序中,这是可能的,因为当此属性设置为false时,我将获得所有未绑定的JS和CSS文件,但是对于管理应用程序,情况并非如此,因为我没有引用虚拟路径,因此它将始终检索捆绑的版本。

我不特别希望有两组相同的代码执行相同的操作。有什么办法可以在一个地方放置我的静态JS和CSS文件,并利用两个应用程序中的捆绑服务来提供捆绑的捆绑文件?根据我的理解,捆绑包不允许绝对路径,所以我知道这不是一个选择。

1 个答案:

答案 0 :(得分:0)

我通过添加一个虚拟目录来解决此问题,该目录指向我要使用的JS和CSS文件的绝对路径。我将此虚拟目录添加到了每个应用程序中,因此/ Lib / ...有效,/ Management / Lib / ...有效。