Asp.net &引用;添加为链接";对于调试中返回404的JavaScript文件

Asp.net &引用;添加为链接";对于调试中返回404的JavaScript文件,asp.net,visual-studio-2010,Asp.net,Visual Studio 2010,使用Visual Studio 2010 ASP.net web应用程序,我有几个项目共享一些JavaScript/css文件。他们共享这些文件的最合乎逻辑的方式是将文件放在一个文件夹中,每个项目都将其包含在“添加为链接”选项中。但是,如果在使用Visual Studio开发服务器进行调试或使用本地IIS web服务器进行调试时以这种方式添加文件,则对这些文件的所有请求都会返回404 Not Found错误。如果我发布了网站,那么文件就会被复制,但这显然无助于调试 有什么我遗漏了,或者这是VS的

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


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

我不会真的把这称为失败,因为您首先要求这样做:在Visual Studio中,项目实际上是指向外部文件的链接。这些文件可以驻留在磁盘上的任何位置,并且不会复制到项目文件夹中


您可能希望在备份过程中自己在本地复制这些文件。这样,文件将保持同步,并且在首次编译之前不会复制它们。

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


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

为了克服这个问题,不久前我创建了一个“”nuget包。此包添加了MsBuild目标,该目标将在生成期间作为链接添加到项目文件夹的所有内容文件复制到项目文件夹


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

请参阅这篇关于向项目文件中添加一个简单内容的博文。

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

从本地或远程web服务器运行很可能不会出现此问题,尽管我没有让它正常工作,如果不需要的话,我宁愿不向本地计算机添加IIS

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

如果文件位于另一个解决方案中,您的命令将类似于(三个
s:一个从bin、project和solution文件夹中取出):

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

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

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

好吧,因为我将其作为链接添加到项目中,所以当我请求该链接时,应将其重定向到源,而不是在调试时返回404。这就是为什么VS不能正确处理链接文档的原因。我测试了手动将文件复制到文件夹,然后它会返回文档,但这不是我应该做的事情。它违背了链接文档的初衷。@Matt,目前还没有执行这种重定向的功能。我想你可以称之为缺点:)那太可惜了。我有一些css和js文件,它们在项目之间共享,如果没有这个功能,这意味着重复的代码和额外的步骤。问题是“输出目录”是bin文件夹。当http请求需要在Styles或Scripts文件夹中工作时,将它们复制到bin文件夹没有帮助。
copy ..\..\OtherProject\Scripts\MyJSFile.js ..\Scripts