根据msdn,Haacked以及这里的问题(例如this),我已在我的.vbproj文件中设置了以下内容:
<MvcBuildViews>true</MvcBuildViews>
并且在我的.vbproj中创建了一个任务
<Target Name="BuildViews" Condition="'$(MvcBuildViews)'=='true'" AfterTargets="Build">
<Message Importance="normal" Text="Precompiling views" />
<AspNetCompiler VirtualPath="temp" PhysicalPath="$(WebProjectOutputDir)" />
</Target>
然而,在构建时,这会给我一个错误:
'/temp' 不是有效的 IIS 应用程序。
作为文件,它只引用 ASPNETCOMPILER
我尝试了各种替代方案作为 VirtualPath - 我已经将项目配置为在 dev 中作为子目录 /local 运行,所以我尝试了那个,还有来自 .vs 文件夹中配置的站点名称,但都没有成功。
我应该更改 VirtualPath(如果需要更改,更改为什么)还是其他配置缺失,以使 temp 起作用?
编辑
运行命令行 MSBuild 时,我也会收到相同的错误。对于我的实际生产系统,我有一个脚本,使用命令行 MSBuild 进行构建,然后将构建好的包移动到产品服务器并进行部署。因此,在构建时不会有 IIS express (或正在运行的 IIS)。编译视图是否需要连接 Web 服务器?
编辑2
我对这里需要使用虚拟路径以及与Web服务器的明显连接感到困惑。一些建议的解决方案涉及配置IIS。据我所知,直到成功构建后,甚至可能都没有运行IIS Express(我用于调试)。无论如何,我的应用程序在虚拟目录中很愉快地运行(调试模式下为/local),但使用该值不起作用。如果有关系的话,这是我项目中.vs文件夹中的applicationhost.config的相关部分(我尝试将相同的路径放入Documents/IIS Express中的applciationhost.config):
<site name="CarWeb-Site" id="2">
<application path="/" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="C:\Users\adam.conway\Documents\My Web Sites\CarWeb-Site" />
</application>
<application path="/local" applicationPool="Clr4IntegratedAppPool">
<virtualDirectory path="/" physicalPath="filesystem path to my project" />
</application>
<bindings>
<binding protocol="http" bindingInformation="*:57047:localhost" />
<binding protocol="http" bindingInformation="*:57047:*" />
</bindings>
</site>
我真的不明白为什么只有VirtualPath="/"
不能工作,因为这是那些配置文件中引用的虚拟路径。
虽然我的主要目的是在Visual Studio中显示视图错误(如果您只回答此问题,我将接受),但也有这样一种情况:我使用MSBuild为生产环境构建,而这台机器上甚至没有安装IIS。
$(OutputPath)
作为_VirtualPath_(因为它必须具有写入访问权限,因为那里创建了.dll),还尝试使用$(IntermediateOutputPath)
,但是出现了相同的错误。(好吧,路径改变了:'/bin/'不是有效的IIS应用程序。'和'/obj/Debug/'不是有效的IIS应用程序。') - Adam~
结合吗?例如"~/temp"
?此外,你是否看过https://dev59.com/3I_ea4cB1Zd3GeqPMlLu? - Armin