在我们的构建过程中,我们aspnet_compiler.exe针对我们的网站运行,以确保ASP.NET/MVC中所有后期绑定的内容实际构建(我对ASP.NET一无所知,但我确信这对于防止在运行时发现故障是必要的).
我们的网站规模相当大,有几百页/观看/控制/等.然而,在10-15分钟范围内所花费的时间似乎过多(作为参考,这比整个解决方案需要大约40个项目的编译时间更长,我们只是预编译了两个网站项目).
我怀疑硬件是问题,因为我运行的是最新的四核英特尔芯片,配备4GB内存和WD Velociraptor 10,000rpm硬盘.而奇怪的部分是EXE似乎没有使用太多的CPU(1-5%)并且似乎也没有做太多的I/O.
那么......这是一个众所周知的问题吗?为什么这么慢?有没有办法加快速度?
注意:为了澄清人们已经回答的一些事情,我不是在谈论Visual Studio中的代码编译.我们已经在使用Web应用程序项目了,编译速度不是问题.问题是在已经编译这些项目之后预先编译网站(有关详细信息,请参阅此MSDN页面)作为开发构建脚本的一部分.我们正在执行就地预编译,而不是将文件复制到目标目录.
因此,我的一个网站有一个应该在应用程序启动之前运行的PreApplicationStartMethod:
[assembly: PreApplicationStartMethod(typeof(ServiceStackAppHost), "Start")]
Run Code Online (Sandbox Code Playgroud)
此方法执行一些引导并依赖于某些配置.
现在,我想编译网站作为我的自动构建过程的一部分 - 所以我调用aspnet_compiler.exe,因为它运行PreApplicationStartMethod而失败:
AfterBuild:
C:\ Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe -v temp -p C:\ Projects\error ASPRUNTIME:预应用程序启动初始化方法启动类型RedactedNameSpace.ServiceStackAppHost引发异常以下错误消息:依赖项的解析失败,type ="..."
在编译网站时,如何避免aspnet_compiler.exe调用PreApplicationStartMethod?
我在VS2008中构建解决方案时遇到问题.通常,它在环境中编译良好.有时,它失败了:
/xxx_WEB/secure/CMSManagedTargetPage.aspx(1): error ASPPARSE: Circular
file references are not allowed.
Run Code Online (Sandbox Code Playgroud)
我重建,它工作正常.
然而,现在,我正在设置CruiseControl.NET系统,并在将构建集成到CC之前使用MSBuild测试我检出的代码.现在,每次我MSBuild,我得到:
"Q:\cc\xxx\checked out from svn\xxx.sln" (default target) (1) ->
(xxx_WEB target) ->
/xxx_WEB/secure/CMSManagedTargetPage.aspx(1): error ASPPARSE: Circular
file references are not allowed.
Run Code Online (Sandbox Code Playgroud)
问题是,我看不出这个引用的位置.
我已经在整个解决方案中搜索了引用,并且除了在页面或其代码隐藏之外的任何地方或者在字符串中,都没有引用页面本身(CMSManagedTargetPage),例如:
C:\ dev2008\xxx\IWW.xxx.ASPNET\AspxHttpHandler.cs(82):inputFile = context.Server.MapPath("〜/ secure/CMSManagedTargetPage.aspx"); C:\ dev2008\xxx\IWW.xxx.ASPNET\AspxHttpHandler.cs(83):virtualPath ="〜/ secure/CMSManagedTargetPage.aspx";
我的汇编参考也很好(据我所知).我的Web应用程序位于依赖项的"顶部",没有任何引用它,因此错误页面因此不能导致循环引用.当然,页面本身可能会在同一个程序集/网站中引用诸如UserControl之类的内容,但如前所述,对CMSManagedTargetPage的搜索没有产生任何结果,因此不会发生这种情况.
更改web.config中的批处理属性对MSBuild没有影响.
我觉得奇怪的是它"有时"在VS中失败并且总是在MSBuild中失败.我错过了一些微妙之处吗?
我刚刚将我的项目从3.5升级到Asp.Net 4.当构建从TeamCity开始时,我收到以下错误:
[Project "Website.metaproj" (Rebuild target(s)):] C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v /Website -p Website\ -u -f PrecompiledWeb\Website\
[12:11:50]: [Project "Website.metaproj" (Rebuild target(s)):] ASPNETCOMPILER error ASPCONFIG: Could not load file or assembly 'Microsoft.VisualBasic.Activities.Compiler' or one of its dependencies. An attempt was made to load a program with an incorrect format.
[12:11:50]: MSBuild output:
[12:11:50]: Copying file from "C:\Program Files\TeamCity\buildAgent\work\8bbb8fc03bd91944\Dependencies\wnvxls.dll" to "Website\\Bin\wnvxls.dll".
[12:11:50]: Copying file from "C:\Program Files\TeamCity\buildAgent\work\8bbb8fc03bd91944\Dependencies\wnvxls.xml" to "Website\\Bin\wnvxls.xml".
[12:11:50]: C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe -v /Website -p Website\ -u -f PrecompiledWeb\Website\
[12:11:50]: ASPNETCOMPILER : error ASPCONFIG: Could …Run Code Online (Sandbox Code Playgroud) 不确定我在这里的内容是否可以通过aspnet_compiler.exe工具实现,但是这里是:
我们有一个网站,我们允许用户修改母版页 - 或者说,我们不允许他们直接修改它们,我们给他们一个减少的"标记"样式语言,他们可以用来修改它们这些页面的HTML,所以他们可以基本上"皮肤"该网站看起来像他们自己的前端.
我渴望通过预编译视图和aspx页面来尝试优化网站.但我希望那些视图和页面使用的布局和母版页保持可更新.但是,我无法让它工作......
假设我们有以下aspx页面:
<%@ Page Title="Hello World" MasterPageFile="~/Skinable/Skin.Master" Language="C#" AutoEventWireup="true" CodeBehind="HelloWorld.aspx.cs" Inherits="Project.HelloWorld" %>
<asp:Content ID="Content1" ContentPlaceHolderID="Content" Runat="server">
Hello World!
</asp:Content>
Run Code Online (Sandbox Code Playgroud)
它引用母版页文件Skin.Master中Skinable的文件夹. Skin.Master需要可更新.这是我尝试过的:
如果我只是使用此aspnet_compiler.exe命令编译站点,那么主页面也会被编译,并且不可更新:
C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe -v / -p d:\SourceFolder d:\CompiledSite
如果我-x Skinable在aspnet_compiler.exe中排除了可换肤文件夹(添加到命令),那么该文件夹不会被复制到输出文件夹,但主页仍然被编译到bin文件夹(即,skin.master.compiled文件生成到构建中)夹).当我们将母版页复制到部署文件夹时,对该文件的更改将被忽略(它只是在编译时使用了母版页).
如果我在运行aspnet_compiler(attrib
+h d:\SourceFolder\Skinable)之前隐藏了Skinable文件夹,那么我得到与上面相同的结果(即通过-x标志排除时)
如果我在运行aspnet_compiler.exe时指定-u标志(Updatable),那么,我不确定它的优点是诚实的,因为似乎没有在该实例中编译,因此编译即时进行当你要求一个页面时,重点是什么......
最后,如果我允许编译所有内容,然后进入bin文件夹并删除skin.master.compiled,那么当您请求使用该母版页的页面时,您会收到错误"文件'Skin.master'没有已预先编译,无法请求"
我怀疑对母版页的引用是这里的问题 - 也就是说,如果一个页面引用了一个母版页,那么如果你想编译页面,那么该母版页也必须编译,但我不确定.我在这里躲起来了吗?
我无法在我们的构建环境中构建我的Web应用程序(而不是Web站点).我们在构建环境中使用DMAKE(不幸的是,这是不可协商的,因此不允许使用MSBUILD)以及通过以下方式调用asp.net预编译器时
C:\ Windows\Microsoft.NET\Framework\v2.0.50727\aspnet_compiler -d -nologo -p Site -f -fixednames -errorstack -v/Debug
我们收到以下错误
错误ASPPARSE:无法加载类型'XYAdmin.Site.Global
如果我从ide编译它是成功的.如果我然后用aspnet_compilier编译它就会成功.因此,当我正在尝试编译的目标dll位于我正在编译的Web应用程序的bin中时,我只能使用aspnet_compiler成功编译.
我一直在讨论使用MSBUILD讨论解决方案的帖子,遗憾的是我无法尝试.
任何帮助,将不胜感激
当我使用aspnet_compiler重新编译我的项目(asp.net,c#)时,即使没有进行任何代码更改,重建的二进制文件也会更改(与之前的版本相比).
据我所知,这是因为构建每次构建时都会生成一个新的模块版本ID(guid)(为了区分构建),另一个类似的问题是:我可以在构建时指定模块版本ID(MVID) .net汇编?
上面链接的问题似乎表明没有办法重建一个项目,并且二进制文件与之前构建的相同的未更改的代码相匹配..好吧,很好,我理解 - 但为什么所有的二进制文件都被重建了?
我认为,根据文档(http://msdn.microsoft.com/en-us/library/ms229863(v=vs.80).aspx),除非将-c指定为参数,否则aspnet_compiler应该只重建那些实际需要的二进制文件(由于代码更改).我是误解还是遗漏了什么?
我正在使用的aspnet_compiler参数:
aspnet_compiler -f -u -fixednames -nologo -v / -p .\myproject\ .\mybuild\
Run Code Online (Sandbox Code Playgroud)
请注意,只有WebSite项目才会出现此问题,而不是Web应用程序项目(它们的编译方式不同).即使您创建一个没有功能的WebSite项目和页面,也不会打开它或在构建之间以任何方式更改它,也会出现此问题.
反编译生成的二进制文件显示没有差异.比较两个"相同"构建的二进制文件,每次在同一部分的二进制文件中显示出小的差异 - 我认为这可能与随机构建guid有关.我发现在构建之间没有办法避免这种变化.
我有一个现有的网站,监控SVN存储库的变化,当有签入时,新的网站是使用aspnet_compiler构建的,然后生产网站上的内容的差异是sftp'd到生产网络服务器.整个持续集成过程使用cruisecontrol.net构建.
我重构了整个站点以使用ASP.NET MVC,现在我正在尝试集成到我的构建过程中.看起来这已经改变了,我没有像以前那样获得与MVC前网站相同的行为.遗憾的是,我没有取得多大进展,因为似乎没有人做过这件事.有没有人有这样的东西以任何形式工作?
使用"devenv"(如"常规项目")自动执行命令行也不起作用.有/ Build命令行开关,但它们只是构建到位.此命令行不公开UI中内置的"发布"机制.项目目录中甚至还有一个{Project Name} .Publish.xml文件,它似乎是需要发布的内容的清单.没办法自动化.
我只是试图从命令行模拟VS 2008 MVC项目中的构建菜单下的"发布{项目名称}".
我正在尝试使用aspnet_compiler将已经从一个位置编译的项目移动到另一个位置.我正在使用Subversion进行版本控制.
该过程基本上从subversion中获取所有代码,进行构建,然后调用aspnet_compiler.
当我有一个排除的ascx文件时,我的问题就出现了.这个文件是最新代码的一部分,但普通的构建编译器会忽略它,所以没问题.但是,Aspnet_compiler会爆炸,因为它找不到该特定控件的代码.
我不确定
我很感激任何帮助.
汤姆
我的解决方案包含一些.net项目,其中一个是ASP.NET MVC项目,我正在尝试发布.所有配置都设置正确,x32和x64,其中没有设置为AnyCPU.
问题:
如果我尝试将项目发布为32位,一切都很好,但尝试以64位模式发布失败并显示错误:
Could not load file or assembly "ProjectA" or one of its dependencies.
An attempt was made to load a program with an incorrect format.
Run Code Online (Sandbox Code Playgroud)
我尝试过并注意到了什么:
自VS 2013以来,MSbuild是VS的一部分而不是.NET Framework的一部分.如果我只是在x64模式下构建解决方案,那么32位msbuild "C:\Program Files (x86)\MSBuild\12.0\Bin\MSBuild.exe"首先运行并启动64位msbuild "C:\Program Files (x86)\MSBuild\12.0\Bin\amd64\MSBuild.exe"所以正常构建没有发布工作就好了.
但是,如果我选择publish,32位MSbuild首先运行,然后它启动32位aspnet_compiler c:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe而不是64位,这导致我上面提到的错误.
到目前为止,我发现的唯一解决方法是更换
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\aspnet_compiler.exe"
Run Code Online (Sandbox Code Playgroud)
64位的
"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet_compiler.exe"
Run Code Online (Sandbox Code Playgroud)
题:
对我的问题有没有更好的(合法的)解决方案?这看起来像VS中的一个错误
msbuild asp.net-mvc aspnet-compiler visual-studio visual-studio-2013
aspnet-compiler ×10
.net ×5
asp.net ×4
asp.net-mvc ×2
c# ×2
msbuild ×2
.net-4.0 ×1
svn ×1
teamcity ×1
webforms ×1