捆绑链接的JavaScript文件
我正在使用Visual Studio 2012和MVC4。 我已经将链接文件(来自另一个项目)添加到我的MVC4应用程序中。 以下是文件的属性:
- 构建行动:内容
- 复制到输出目录:不要复制
这是我的包的一个例子:
bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include("~/Scripts/jquery.unobtrusive*","~/Scripts/jquery.validate*","~/Scripts/FolderA/*.js"));
为了测试,我还在该文件夹中添加了一个空的JavaScript文件(temp.js)。 这不是链接文件。 检查页面源时,会显示此文件,但链接文件不会显示。 我无法直接导航到此文件。 捆绑中的其他文件看起来很好。
链接文件可以捆绑吗?
简答:在调试模式下为否,在发布模式下为是。
文件链接是一种Visual Studio概念,用于将存储在别处的文件包含在代码和资源编译中。 显然,如果您需要编译它(它是源文件),如果您需要将其作为资源嵌入或者需要将其复制到目标目录(如果将复制到输出目录设置为复制),则链接文件将起作用。
为什么它在调试模式下不起作用
在调试模式下,禁用捆绑并单独链接脚本。 由于文件未复制到Web应用程序的根目录,因此用户无法通过IIS访问它们。 如果每次构建应用程序时都尝试启用脚本文件的复制,则文件将被复制到Web应用程序的bin
目录中。 无法通过IIS访问此目录,再次这不起作用。
为什么它在发布模式下工作
在发布模式下,执行脚本捆绑。 脚本文件不会单独链接到网页,因此用户无需直接访问它们。 只有捆绑代码才能访问它。 但你必须偷偷摸摸地配置它。 你需要:
- 将链接脚本的
Copy to Output Directory
设置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"));
禁用调试模式
这里提到的调试模式不是Visual Studio中的编译器设置。 这是web.config
文件中的一个元素。
我发现捆绑使用链接文件的最简单的解决方案是添加一个MSBuild目标,它会在每次构建之前自动将任何链接的内容文件复制到正确的位置。
只需将以下内容添加到[project].csproj
文件中:
这允许我从他们的NuGet包链接Angular JavaScript文件,Bootstrap CSS文件等,而不必将它们提交到源代码控制或打破捆绑。