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.compiledApp_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 以可更新标志成功,但否则失败?

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

VS2005 debug编译和msbuild编译 有啥区别

msbuild发布web应用程序