aspnet_compiler 不会编译放在 web 应用程序目录下的 c# 代码
Posted
技术标签:
【中文标题】aspnet_compiler 不会编译放在 web 应用程序目录下的 c# 代码【英文标题】:aspnet_compiler won’t compile c# code placed under web application directory 【发布时间】:2009-10-01 07:41:01 【问题描述】:多年来,我一直在 Visual Studio 中使用鼠标右键发布网站,一切都很好,除了手动工作太多。最近我改用构建脚本调用aspnet_compiler来发布ASP.NET Web应用程序。在我的构建脚本中,我会执行以下操作:
sh "#aspnet_compiler -p ../src/webapp -v targetDir ./publish –u"
我的项目目录结构如下:
/build/rakefile.rb
/build/publish/ --published site goes here
/src/website/bll/ --business logic goes here
/src/website/ --aspx pages
/src/website/code/ --some c# code
调用 aspnet-compiler 时一切正常,除了 /src/website/code/ 下的 c# 代码不会被编译。在我看来,aspnet-compiler 编译了 bll 目录下的 c# 代码,然后 xcopy 了 /src/website/ 下的所有内容到发布目录(包括 /src/website/code/ )。我不知道是我没有使用正确的开关调用 aspnet-compiler 还是这是期望的行为?
请帮忙谢谢!
【问题讨论】:
【参考方案1】:我自己发现了问题。
首先,我的 rake 构建脚本最终看起来像这样:
sh "#aspnet_compiler -f -fixednames -u -p ../src/website -v / ./publish"
在Visual Studio中鼠标右键点击“发布”的第二个输出行为与调用aspnet_compiler不同。
右键发布将:
直接复制Global.asax 只在bin目录下生成.dll和.pdb(.pdb文件如果不需要调试可以删除)文件调用aspnet_compiler时的位置:
将Global.asax编译成bin目录下的App_global.asax.compiled和App_global.asax.dll 还会生成PrecompiledApp.config(这是因为我已经指定aspx页面应该是可更新的)发布任务后有一个清理任务,基本上删除了bin下除了.dll扩展名之外的任何内容。
不管怎样,我现在学到了一些新东西。
【讨论】:
引用 aspnet_compiler msdn.microsoft.com/en-us/library/ms229863%28VS.80%29.aspx【参考方案2】:我在构建机器上使用 aspnet_compiler 时遇到了类似的问题(我使用了 MSBuild)。我的解决方案是在调用 aspnet_compiler 之前构建解决方案。 在 MSBuild 中,它看起来像:
<MSBuild Projects="$(PhysicalPath)\solutionName.sln" Properties="Configuration=Debug"/>
您也可以使用 devenv solutionName.sln /build(如果不使用 MSBuild)。
【讨论】:
以上是关于aspnet_compiler 不会编译放在 web 应用程序目录下的 c# 代码的主要内容,如果未能解决你的问题,请参考以下文章
为啥 aspnet_compiler 需要虚拟路径 (-v) 参数?
如何在没有 web.config 的情况下为 aspnet_compiler.exe 指定 CompilerVersion?
为啥 aspnet_compiler 以可更新标志成功,但否则失败?