Mar*_*sel 8 c# asp.net-mvc asp.net-mvc-4
我正在使用Visual Studio 2012和MVC4.我已经将链接文件(来自另一个项目)添加到我的MVC4应用程序中.以下是文件的属性:
这是我的包的一个例子:
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery.unobtrusive*","~/Scripts/jquery.validate*","~/Scripts/FolderA/*.js"));
Run Code Online (Sandbox Code Playgroud)
为了测试,我还在该文件夹中添加了一个空的JavaScript文件(temp.js).这不是链接文件.检查页面源时,将显示此文件,但链接文件不会出现.我无法直接导航到此文件.捆绑中的其他文件看起来很好.
链接文件可以捆绑吗?
简答:在调试模式下为否,在发布模式下为是.
文件链接是一种Visual Studio概念,用于将存储在别处的文件包含在代码和资源编译中.显然,如果需要编译文件(它是源文件),如果需要将其作为资源嵌入,或者需要将其复制到目标目录(如果将"复制到输出目录"设置为"复制"),则链接文件将起作用.
为什么它在调试模式下不起作用
在调试模式下,禁用捆绑并单独链接脚本.由于文件未复制到Web应用程序的根目录,因此用户无法通过IIS访问它们.如果每次构建应用程序时都尝试启用脚本文件的复制,则文件将被复制到binWeb应用程序的目录中.无法通过IIS访问此目录,再次这不起作用.
为什么它在发布模式下工作
在发布模式下,执行脚本捆绑.脚本文件未单独链接到网页,因此用户无需直接访问它们.只有捆绑代码才能访问它.但是你必须偷偷摸摸地配置它.你需要:
Copy to Output Directory链接的脚本Copy always.如果将链接的脚本存储在〜/ Scripts中,则在编译应用程序后,它们将被复制到〜/ bin/Scripts文件夹中.bin目录.请注意~/bin/Scripts/以下行:
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery.unobtrusive*","~/Scripts/jquery.validate*","~/bin/Scripts/FolderA/*.js"));
Run Code Online (Sandbox Code Playgroud)
禁用调试模式
这里提到的调试模式不是Visual Studio中的编译器设置.这是web.config文件中的元素.
<system.web>
<compilation debug="false" targetFramework="4.5" />
Run Code Online (Sandbox Code Playgroud)
我发现捆绑使用链接文件最简单的解决方案是添加一个MSBuild目标,该目标可在每次构建之前自动将所有链接的内容文件复制到正确的位置。
只需将以下内容添加到[project].csproj文件中:
<!-- Copy linked content files to their location on build. -->
<Target Name="CopyLinkedContentFiles" BeforeTargets="Build">
<Copy SourceFiles="%(Content.Identity)" DestinationFiles="%(Content.Link)" SkipUnchangedFiles="true" OverwriteReadOnlyFiles="true" Condition="'%(Content.Link)' != ''" />
</Target>
Run Code Online (Sandbox Code Playgroud)
这使我可以从它们的NuGet包链接Angular JavaScript文件,Bootstrap CSS文件等,而不必将它们提交给源代码管理或破坏捆绑。
| 归档时间: |
|
| 查看次数: |
2278 次 |
| 最近记录: |