标签: aspnet-compiler

为什么aspnet_compiler.exe这么慢(可以更快)?

在我们的构建过程中,我们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页面)作为开发构建脚本的一部分.我们正在执行就地预编译,而不是将文件复制到目标目录.

asp.net aspnet-compiler pre-compilation

28
推荐指数
3
解决办法
5490
查看次数

避免运行PreApplicationStart方法的aspnet_compiler

因此,我的一个网站有一个应该在应用程序启动之前运行的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?

.net c# asp.net aspnet-compiler

24
推荐指数
1
解决办法
2383
查看次数

不允许循环文件引用

我在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中失败.我错过了一些微妙之处吗?

msbuild aspnet-compiler visual-studio-2008

18
推荐指数
5
解决办法
3万
查看次数

ASPNETCOMPILER错误ASPCONFIG:无法加载文件或程序集"Microsoft.VisualBasic.Activities.Compiler"或其依赖项之一

我刚刚将我的项目从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)

.net teamcity aspnet-compiler .net-4.0

18
推荐指数
3
解决办法
4万
查看次数

预编译aspx和cshtml页面,但保留主页面或布局页面可更新

不确定我在这里的内容是否可以通过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.MasterSkinable的文件夹. 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'没有已预先编译,无法请求"

我怀疑对母版页的引用是这里的问题 - 也就是说,如果一个页面引用了一个母版页,那么如果你想编译页面,那么该母版页也必须编译,但我不确定.我在这里躲起来了吗?

.net asp.net webforms aspnet-compiler

18
推荐指数
1
解决办法
280
查看次数

aspnet_compiler ASPParse无法加载类型

我无法在我们的构建环境中构建我的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

16
推荐指数
2
解决办法
1万
查看次数

为什么ASP.NET编译器会在每个构建中重建所有二进制文件?

当我使用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有关.我发现在构建之间没有办法避免这种变化.

.net c# asp.net aspnet-compiler

11
推荐指数
1
解决办法
1082
查看次数

如何从命令行发布ASP.NET MVC项目?

我有一个现有的网站,监控SVN存储库的变化,当有签入时,新的网站是使用aspnet_compiler构建的,然后生产网站上的内容的差异是sftp'd到生产网络服务器.整个持续集成过程使用cruisecontrol.net构建.

我重构了整个站点以使用ASP.NET MVC,现在我正在尝试集成到我的构建过程中.看起来这已经改变了,我没有像以前那样获得与MVC前网站相同的行为.遗憾的是,我没有取得多大进展,因为似乎没有人做过这件事.有没有人有这样的东西以任何形式工作?

使用"devenv"(如"常规项目")自动执行命令行也不起作用.有/ Build命令行开关,但它们只是构建到位.此命令行不公开UI中内置的"发布"机制.项目目录中甚至还有一个{Project Name} .Publish.xml文件,它似乎是需要发布的内容的清单.没办法自动化.

我只是试图从命令行模拟VS 2008 MVC项目中的构建菜单下的"发布{项目名称}".

model-view-controller asp.net-mvc aspnet-compiler

10
推荐指数
1
解决办法
1184
查看次数

如何使用aspnet_compiler处理排除的文件?

我正在尝试使用aspnet_compiler将已经从一个位置编译的项目移动到另一个位置.我正在使用Subversion进行版本控制.

该过程基本上从subversion中获取所有代码,进行构建,然后调用aspnet_compiler.

当我有一个排除的ascx文件时,我的问题就出现了.这个文件是最新代码的一部分,但普通的构建编译器会忽略它,所以没问题.但是,Aspnet_compiler会爆炸,因为它找不到该特定控件的代码.

我不确定

  • 我这样做是对的;
  • 有一种方法可以从Subversion获取正确的文件树
  • 有一种更简单的方法; 要么
  • 这是预期的,我需要每次都删除被排除的文件.

我很感激任何帮助.

汤姆

.net svn aspnet-compiler web-deployment

9
推荐指数
2
解决办法
1698
查看次数

Visual Studio 2013调用32位aspnet_compiler而不是64位

我的解决方案包含一些.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

9
推荐指数
2
解决办法
2583
查看次数