2009-09-14 70 views
8

我目前正在使用一个ASP.NET CMS,它可以在App_Code目录中保存近500个代码文件,以及数百个带有代码隐藏在网站各种文件夹中的Web表单。这是一个网站项目(不是一个Web应用程序项目),我不愿意改变它,因为这是一个涉及多个开发人员的项目,此外,这也是CMS的出货方式。优化ASP.NET网站项目的构建性能?

我正在寻找提示和技巧来优化此网站项目的构建过程,因为Visual Studio经常要重建所有源文件和代码隐藏文件,这可能需要几分钟的时间。

是否有避免重建所有文件的方法?我应该提出将我们的代码和CMS代码分离为单独的Web应用程序项目(而不是网站项目)的观点吗?有没有其他方法可以提高构建性能?

+1

无论如何,这是CMS Sitefinity吗? – 2009-09-16 05:04:04

+0

哈哈不,这是一个鲜为人知的称为Litium的CMS。但现在我知道另一个CMS,以避免... =) – Blixt 2009-09-16 06:31:17

+1

哦,不,Sitefinity是好的,但它绝对患有相同的症状。它让我感到它也是一个网站,而不是一个Web应用程序项目。 – 2009-09-17 00:48:57

回答

13

如果最简单的解决方案是patch-wise,以尽可能保持.cs结构相似,那么我会按照Andreas的建议将App_Code移到至少1个其他项目中。

Scott Guthrie posted a few tips在VS 2005中编译出来之后,你没有指定你在哪个版本,但是同样的速度提示也适用。他的文章的第二部分专门针对网站项目。

另一个小窍门是如果你在页面上工作而不是代码实际上在App_Code目录there is a build option that may be useful。转到项目属性>构建>更改从构建Web站点运行启动页面构建页面之前,当你火起来的调试器,这将只建启动页面。我不确定这种情况是否经常发生,但如果您的大部分工作都发生在页面中,而不是在App_Code中,这将为您节省大量编译时间。

App_Code必须一起构建,您应该避免让代码隐藏等。所有可以在其他地方应该是。请注意:至少在调试时,编译时间通常比Web应用程序快30-50倍。话虽如此,你必须在每次代码更改时重新编译整个应用程序,所以存在缺陷......但是由于命名空间的变化等原因,我明白补丁会对你有所帮助。另外,请记住,将代码拆分为其他项目时,除了在编译方面更简单全面之外,Visual Studio不需要编译这些其他依赖项目,除非它们已更改。就目前来看,一切都是公平的游戏,因为项目中任何可以改变的东西都可能影响其他任何东西......但是如果将它分开,Visual Studio只会在您更改项目或项目时编译其他项目他们参考得到重建。

3

您至少应该尝试将其转换为Web应用程序,除非出于某种政治原因不这样做。它不像听起来那么难,最大的问题是所有的开发人员可能不得不重新配置他们的解决方案。

尝试将App_Code中的代码移动到不同的项目,因为它们并不需要在网站中。至少应该有一点帮助。

+1

我担心的是,更改项目结构使得从CMS开发人员应用补丁程序变得更加困难,并且还会使获得支持变得更加困难(因为我们不使用“官方”配置。) – Blixt 2009-09-14 11:08:22

+1

我同意@Blixt。虽然将网站转换为Web应用程序并不困难,但您会将自己锁定在比较简单的CMS供应商升级和补丁程序之外。 – 2009-09-17 00:45:11

0

我认为你最大的问题将是大量的文件。我会将网络应用分成多个(至少2个)项目:您的Web项目和业务层(或其他类型的项目)。

我最好的应用程序代码中的大部分文件都是很少更改的实体或文件,因此在您的情况下,将它们保留在您的Web应用程序中并不合理。

如果您决定在您对其他项目中的某个文件进行更改时决定采用此方法,则在部署更改时必须非常小心,因为您必须部署整个dll。

4

你应该尝试一下我们最近添加的新的OptimizeCompilation标志。

<compilation optimizeCompilations="true"> 

请看看我的blog post学习讨论什么内容,以及在哪里得到它。除非你使用Win7或者使用VS2010,否则你需要通过hotfix来获取它。

+0

当你更改App_Code中的文件然后请求页面时,你应该看到改进,因为App_Code将被重新编译,而页面不会。请注意,这适用于运行时行为,这与VS内发生的编译行为不同。 – 2009-09-23 19:36:16

+0

关于什么的_compilation调试= “假” targetFramework = “4.5.1” defaultLanguage = “C#” optimizeCompilations = “真” 一批= “真” maxBatchGeneratedFileSize = “2147483647” maxBatchSize = “2147483647” numRecompilesBeforeAppRestart = “2147483647_? – Kiquenet 2015-07-09 07:46:21

0

我们遇到了与我们的项目类似的问题,该项目采用这种方式可以热添加新的白标签合作伙伴网站。

我们发现加快构建时间的最简单方法是减少Visual Studio挂起的IO瓶颈。获得体面的SSD(我们使用OCZ 60gb Summit驱动器),您应该发现构建时间大大提高。

另一个节约时间是减少项目的目录总数。对于Visual Studio遇到的每个新目录,都会启动编译器的新实例。在同一目录中尽可能多的文件可以降低成本。 (要获得使项目可维护的文件夹结构,请使用虚拟文件夹)