为啥 aspnet_compiler 需要虚拟路径 (-v) 参数?

Posted

技术标签:

【中文标题】为啥 aspnet_compiler 需要虚拟路径 (-v) 参数?【英文标题】:Why aspnet_compiler requires virtual path (-v) parameter?为什么 aspnet_compiler 需要虚拟路径 (-v) 参数? 【发布时间】:2014-08-20 19:29:28 【问题描述】:

我想准备一个 ASP.NET MVC 4 站点的预编译包。

我可以使用命令行预编译它,如下所示:

aspnet_compiler -nologo -v / -p "C:\WebSite1" -u "C:\TargetPath"

然而这让我很困惑,为什么aspnet_compiler 需要虚拟路径。如果我稍后决定将此包部署到不同路径下的 IIS 服务器怎么办?它会导致一些运行时问题吗?

部署是指简单的 xcopy 部署。

【问题讨论】:

【参考方案1】:

如果您使用 -p 开关指定源的物理路径,则需要虚拟路径。我不情愿地提交此页面http://www.asp.net/web-forms/tutorials/deployment/deploying-web-site-projects/precompiling-your-website-cs 以获取有关 -v 如何与应用程序相关引用(即 ~/path/file.他所说的需要更多的限定,并且似乎不适用于默认 IIS 站点下的应用程序。

他的解释是使用 -v /MySite 会将引用从 ~/path/file 更改为 ~/MySite/path/file。但是我没有经历过这种行为。至少编译默认 IIS 网站下的应用程序(无论是在网站的根目录还是嵌套)。例如,如果我使用 /v kart 进行编译,则对“~/path/file”的内联引用和代码隐藏引用作为“~/path/file”而不是“~/kart/path/file”到达 dll。在应用根目录现在位于不同路径的其他地方部署我的 WebForm 应用程序时,我没有遇到运行时问题。

如果您正在编译默认 IIS 网站下的应用程序,则将 -p 与源的物理路径一起使用和 -v 与虚拟路径一起使用是多余的。如果省略 -p 开关,它将与仅使用 -v 编译相同。在查看批处理文件以记录源位置时,使用 -p 和物理源路径冗余可能会很好。

【讨论】:

为了满足我的好奇心,我创建了一个新的 IIS 站点并向其中添加了一个新应用程序。正如链接文章所暗示的那样,使用 -v 和虚拟路径进行编译并没有修改应用程序根目录的相对引用。我认为使用 -v 对部署路径问题没有任何顾虑。

以上是关于为啥 aspnet_compiler 需要虚拟路径 (-v) 参数?的主要内容,如果未能解决你的问题,请参考以下文章

devenv VS aspnet_compiler

详细解说Tomcat 设置虚拟路径的几种方法及为啥设置虚拟路径

详细解说Tomcat 设置虚拟路径的几种方法及为啥设置虚拟路径

aspnet_compiler 不会编译放在 web 应用程序目录下的 c# 代码

如何在没有 web.config 的情况下为 aspnet_compiler.exe 指定 CompilerVersion?

aspnet_compiler 忽略目标目录并将 dll 留在 Temporary ASP.NET Files 目录中