在Visual Studio Web应用程序项目中使用IIS虚拟目录

时间:2009-12-22 03:52:38

标签: asp.net visual-studio iis virtual-directory staging

我有一个ASP.NET项目,其中包含以下目录
\广告
\照片

这两个文件夹中都有数以千计的文件,这些文件经常更新。我目前的IIS设置如

\的Inetpub \ wwwroot的\ FOO
\的Inetpub \ wwwroot的\富\广告
\的Inetpub \ wwwroot的\富\照片
\的Inetpub \ wwwroot的\ foo.staging
\的Inetpub \ wwwroot的\ foo.staging \广告
\的Inetpub \ wwwroot的\ foo.staging \照片

我正在考虑把它变成白
\的Inetpub \ wwwroot的\ FOO
\的Inetpub \ wwwroot的\富\广告
\的Inetpub \ wwwroot的\富\照片
\的Inetpub \ wwwroot的\ foo.staging
\的Inetpub \ wwwroot的\ foo.staging \广告
\的Inetpub \ wwwroot的\ foo.staging \照片
\的Inetpub \ wwwroot的\ foo.resources \广告
\的Inetpub \ wwwroot的\ foo.resources \照片

并将foo和foo.staging中的子目录转换为指向foo.resources子目录的虚拟目录。这样,当我在分段测试时,我不必在每次部署时复制广告和照片中的所有文件,并担心事情不同步。这是一个坏主意吗?我正在使用Visual Studio 2008开发 - 有没有办法让VS将我的Web应用程序项目子目录视为虚拟目录?

6 个答案:

答案 0 :(得分:2)

IIS中的Web应用程序中包含的虚拟目录看起来就像是Visual Studio中的包。

打开root应用程序并单击该程序包,它应该询问您是否要将子app / vdir添加到解决方案中。然后将其作为第二个项目打开,然后您可以引用它或根据需要使用它。

测试和实时部署背后的想法是,如果您的测试破坏了某些内容,您应该拥有单独的数据。基本上,通过使用实时数据进行测试,您必须确保不会删除/更改您不应该删除的内容,否则您将破坏数据的实时副本。

话虽如此,如果您计划构建的所有内容都是读取数据的东西,这是一个好主意,因为它可以为您节省大量的磁盘空间和部署时间。

首先在IIS中查找您想要的方式然后在VS中打开它。

Visual Studio将服务器上定义的所有虚拟应用程序视为子应用程序。 如果资源未在子目录中设置为IIS中的应用程序,则它应显示为普通文件夹。

例如......

如果在IIS上设置2个网站并将物理文件夹映射到两个虚拟目录上的图像,则在Visual Studio中打开时,您应该可以将它们作为普通文件夹访问。

但是,如果您将虚拟目录设置为IIS中的应用程序,然后在VS中打开该网站,则应该只显示一个包。单击它会将其添加为VS中的第二个项目。

我不是最擅长解释事情,但希望这是有道理的。

希望有所帮助:)

答案 1 :(得分:0)

我认为解决这个问题的方法是首先使用vdirs在IIS中设置它,然后在Visual Studio中从IIS打开网站。请参阅my answerthis question

答案 2 :(得分:0)

我发现我的应用程序存在类似的问题,即需要大量资源来复制部署 我正在考虑构建一个文件处理程序,为浏览器提供图像资源。即当您链接到图像时,您会有/filehandler.ashx?image=/ads/101/o3904838402384.jpg之类的图像,那么您可以拥有一个配置设置,指向测试和实时环境的不同或相同的文件存储文件夹。

以下是其工作原理的基础链接。

http://dotnetperls.com/ashx-handler

答案 3 :(得分:0)

可以,在Visual Studio中使用链接文件夹=这会创建到另一个项目(或光盘上其他位置)的文件夹的虚拟链接,但不会在磁盘上物理复制它们。 / p>

答案 4 :(得分:0)

另一种选择......如果您正在使用SVN并且如果您很高兴在磁盘上物理上两次图像,但仍然使它们同步,则使用SVN外部

答案 5 :(得分:0)

由于这些是资源,您是否有任何特殊原因需要它们在Visual Studio中? VS,IMO用于管理解决方案中的代码,而不一定是目录结构。

在IIS中,您可以像设置目录结构一样设置目录结构(甚至将虚拟目录指向网络驱动器),Visual Studio可以完全忽略它,因为它可能只是一堆静态文件。