对于在调试中返回404的JavaScript文件,“添加为链接”

时间:2010-11-12 16:44:39

标签: asp.net visual-studio-2010

使用Visual Studio 2010 ASP.net Web应用程序,我有几个共享一些JavaScript / css文件的项目。他们共享这些文件的最合理方式是将文件放在一个文件夹中,每个项目都包含“添加为链接”选项。但是,如果我在使用Visual Studio开发服务器进行调试或使用本地IIS Web服务器进行调试时以这种方式添加文件,则对这些文件的所有请求都会返回404 Not Found错误。如果我发布该站点,那么文件将被复制,但这显然无助于调试。

我有什么遗漏或者这是VS的失败吗?

5 个答案:

答案 0 :(得分:14)

为了解决这个问题,前段时间我创建了一个'MSBuild.WebApplication.CopyContentLinkedFiles'nuget包。此软件包添加了MsBuild目标,该目标在构建期间复制作为项目文件夹链接添加的所有内容文件。

注意:如果您使用源代码管理,那么最好将复制的文件(从Web Application文件夹)添加到忽略列表。

答案 1 :(得分:4)

我不会真的称之为失败,因为您首先要求该行为:Visual Studio项目中的linked items实际上是链接到外部文件。这些文件可以驻留在磁盘上的任何位置,而不会复制到项目文件夹中。

您可能希望在pre-build event期间自己在本地复制这些文件。这样,文件将保持同步,在第一次编译之前不会复制它们。

答案 2 :(得分:0)

问题似乎是网站直接从源文件夹运行,而不是从bin文件夹运行。这意味着文件将丢失,无论是否将其复制到输出文件夹。

从本地或远程Web服务器运行可能不会出现此问题,但我没有这样做,我宁愿不将IIS添加到本地计算机上我没有必要。

添加预构建复制命令确实有效。请注意,当前目录将是bin文件夹。 (如果要查看,可以使用cd将当前目录回显到构建窗口中:

如果文件在另一个解决方案中,那么您的命令将类似于(三个..:一个用于从bin,project和solution文件夹中删除):

copy ..\..\..\OtherSolution\OtherProject\Scripts\MyJSFile.js ..\Scripts\

如果它在同一个解决方案中,但是在另一个项目中:

copy ..\..\OtherProject\Scripts\MyJSFile.js ..\Scripts

一个小问题是文件的链接会与文件的新副本发生冲突,即使您没有将其添加到项目中。只要你首先建立链接,它似乎工作。如果您先复制该文件,则必须手动删除该副本,然后才能添加该链接之前刷新解决方案资源管理器。

答案 3 :(得分:-2)

在解决方案资源管理器中选择链接,然后查看属性窗口并将“复制到输出目录”设置为“始终复制”。链接的项目默认设置为“不复制”。

顺便说一句,使用VSCommands 2010扩展名时,您可以直接从解决方案资源管理器中轻松地将许多文件复制为链接。

答案 4 :(得分:-2)

请参阅此博客文章,了解项目文件的简单添加内容。 http://mattperdeck.com/post/Copying-linked-content-files-at-each-build-using-MSBuild.aspx