【发布时间】:2014-02-24 19:53:59
【问题描述】:
我的 ASP.NET MVC4 项目在调试版本中运行良好,只要我不介意在它变得有点困惑和“丢失”捆绑包时重复重建和重新发布,就像它经常做的那样。
似乎捆绑的“丢失”与我的一种布局有关, 它将 CSS 捆绑包的内容直接插入到页面中,以 为我们的文档管理生成模板以显示“文档” 由表单域组成。如果我构建然后我做的第一件事就是加载 首先具有该布局的页面,MVC4 确定捆绑包不存在, 直到我做了一个干净的构建,并使用不同的布局重新加载页面。
所以我在那里做了一些与众不同的事情。
现在我尝试了发布版本,但重试方法不适用于该版本。 MVC 在页面中生成以下标签。服务器上不存在这些资源。没有bundles 目录。 Content 和 Content/themes/base 目录存在,但其中没有任何内容称为 css,当我尝试加载任何链接资源时,我得到一个 404。该页面没有 CSS 和脚本。
我的布局文件中的这段代码...
@Styles.Render("~/Content/css")
@Styles.Render("~/Content/themes/base/css")
@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/jqueryui")
...变成...
<link href="/MyApp/Content/css?v=BoqupuQxZQpXG1tSIMNZQqNVpJ_E-NUxg_QIsyvmKn01" rel="stylesheet"/>
<link href="/MyApp/Content/themes/base/css?v=myqT7npwmF2ABsuSaHqt8SCvK8UFWpRv7T4M8r3kiK01" rel="stylesheet"/>
<script src="/MyApp/bundles/modernizr?v=qVODBytEBVVePTNtSFXgRX0NCEjh9U_Oj8ePaSiRcGg1"></script>
<script src="/MyApp/bundles/jquery?v=JzhfglzUfmVF2qo-weTo-kvXJ9AJvIRBLmu11PgpbVY1"></script>
<script src="/MyApp/bundles/jqueryui?v=EHft7nwilnDMnejvwTyEKn_C5lwIsN1M3Xyb8c9OmSQ1"></script>
你是如何做到这一点的?是配置问题吗?我在这里找到了一个人whose solution is to say that "it should work",我同意。但是,在我的情况下,它实际上证明 not 起作用,因此该解决方案可能不适合我在这里的特定情况。
我注意到 MVC4 中的很多东西都被破坏了,而且捆绑功能无疑是错误的;发布配置根本不起作用吗?
我已经尝试了关闭web.config 中的调试的建议,
<compilation debug="false" targetFramework="4.5" />
...但这没有任何效果。无论如何,我找不到强制Web.Release.config 将其插入输出web.config 的方法。
更新
如果我放了
BundleTable.EnableOptimizations = true;
...在BundleConfig.RegisterBundles 的底部,当我按F5“运行”时,它会在VS 开发服务器中正确执行捆绑操作。如果我将其更改为false 并按 F5,它会呈现一组脚本和引用包中各个文件的诸如此类的标签。两者都能正常工作——在我的开发机器上。所以让我们将其设置为false 并发布...
BundleTable.EnableOptimizations = false;
这在我发布到服务器时有效,即使它是发布版本。
所以,有一个解决方法。
【问题讨论】:
-
听起来您的源 js 和 css 文件几乎没有部署到服务器。 /bundles 目录是一个虚拟目录,它不存在。发布您的实际 BundleConfig.cs,并确保这些源文件存在于服务器上。
-
@danludwig BundleConfig.cs 正是向导创建的。 BundleConfig.cs 包含的文件都存在于服务器上。
bundles虚拟目录是否需要任何 IIS7 配置? -
不,不需要为此配置 IIS,这是 MVC 工作
标签: c# asp.net asp.net-mvc asp.net-mvc-4