使用Visual Studio 2010 ASP.net Web应用程序,我有几个共享一些JavaScript / css文件的项目。他们共享这些文件的最合理方式是将文件放在一个文件夹中,每个项目都包含“添加为链接”选项。但是,如果我在使用Visual Studio开发服务器进行调试或使用本地IIS Web服务器进行调试时以这种方式添加文件,则对这些文件的所有请求都会返回404 Not Found错误。如果我发布该站点,那么文件将被复制,但这显然无助于调试。
有没有我缺少的东西,或者这是VS的失败?
为了解决这个问题前段时间我创造了一个'MSBuild.WebApplication.CopyContentLinkedFiles'nuget包。此软件包添加了MsBuild目标,该目标在构建期间复制作为项目文件夹链接添加的所有内容文件。
注意:如果您使用源代码管理,那么最好将复制的文件(从Web Application文件夹)添加到忽略列表。
为了解决这个问题前段时间我创造了一个'MSBuild.WebApplication.CopyContentLinkedFiles'nuget包。此软件包添加了MsBuild目标,该目标在构建期间复制作为项目文件夹链接添加的所有内容文件。
注意:如果您使用源代码管理,那么最好将复制的文件(从Web Application文件夹)添加到忽略列表。
我不会真的称之为失败,因为你首先要求这种行为: 链接的项目 在Visual Studio项目中是实际的 链接 到外部文件。这些文件可以驻留在磁盘上的任何位置,不会复制到项目文件夹中。
您可能希望在本地复制这些文件 预建活动。这样,文件将保持同步,并且在第一次编译之前不会复制它们。
问题似乎是网站直接从源文件夹运行,而不是从bin文件夹运行。这意味着文件将丢失,无论是否将其复制到输出文件夹。
从本地或远程Web服务器运行可能不会有这个问题,虽然我没有这样做,如果我不需要,我宁愿不将IIS添加到我的本地机器。
添加预构建复制命令确实有效。请注意,当前目录将是bin文件夹。 (您可以使用 cd
如果要查看它,将当前目录回显到构建窗口):
如果文件在另一个解决方案中,您的命令将类似于(三个 ..
s:从每个bin,project和solution文件夹中取出一个):
copy ..\..\..\OtherSolution\OtherProject\Scripts\MyJSFile.js ..\Scripts\
如果它在同一个解决方案中,但是一个不同的项目:
copy ..\..\OtherProject\Scripts\MyJSFile.js ..\Scripts
一个小问题是,即使您没有将文件添加到项目中,该文件的链接也会与文件的新副本发生冲突。只要你首先建立链接,它似乎工作。如果先复制文件,则必须手动删除该副本,然后才能添加链接之前刷新解决方案资源管理器。
在解决方案资源管理器中选择链接,然后查看属性窗口并将“复制到输出目录”设置为“始终复制”默认情况下,链接的项目设置为“不复制”。
顺便说一句,您可以在使用时直接从Solution Explorer直接复制许多文件作为链接 VSCommands 2010 延期。