3

这是 VS 2008 和 .Net 3.5。

我使用了一个自定义部署项目脚本,它类似于发布右键单击菜单,但我已经对其进行了自定义以执行文件重命名和其他各种零碎的操作。它工作得非常好,并且大大简化了发布过程。

我得知本周末在我们的一个实时站点上出现了一个问题,如果该站点被预编译(长篇故事),该问题将被阻止。

因此,我一直在尝试将 AspNetCompiler MSBuild 任务(使用 PhysicalPath 属性指向中间发布文件夹)注入部署脚本,并且我对“VirtualPath”选项有疑问。

尽管在此预部署阶段网站不在 IIS 中,但您仍需要为“VirtualPath”属性提供值。我在这里看到aspnet_compiler.exe 上的关联 -v 开关使用此值来解析编译期间整个站点使用的“~”根虚拟路径。

因此,我认为这意味着您在此处传递的任何内容在部署时都必须是应用程序的虚拟根目录,否则它将无法工作。

但是,我已经尝试过了,在此选项中传递了类似“/fake/fake”的内容,然后将我的一个母版页更改为通过基于应用程序的 url 而不是相对的 url 引用 css,即使在部署时它仍然有效到“/site”而不是“/fake/fake”的虚拟路径。

那么这个问题的最终答案是什么?我是否需要担心这个 VirtualPath 值完全等于 IIS 中站点的最终部署位置?我希望不会,因为我真的不希望我的部署项目对目标 Web 服务器的虚拟层次结构有任何了解,以防它需要更改。

4

1 回答 1

5

我已经分析了预编译的代码,似乎预编译器会自动将基于应用程序的路径解析为相对路径,而不管您设置的 VirtualPath 是什么。我还尝试将相同的预编译站点部署到目标服务器上的不同虚拟路径,并且没有任何问题。

因此,我有足够的信心可以说:不,这个值是什么并不重要。

毫无疑问,肯定会有一些我可能错过的东西——但在我被证明是错误的之前,我会假设我是对的!

于 2010-08-10T12:29:41.470 回答