我目前正在使用一个ASP.NET CMS,它在App_Code目录中保存了近500个代码文件,以及在网站的各个文件夹中包含代码隐藏的数百个Web表单。这是一个网站项目(不是一个Web应用程序项目),我不愿意改变它,因为这是一个涉及多个开发人员的项目,加上CMS的出货方式。
我正在寻找优化此网站项目构建过程的提示和技巧,因为Visual Studio经常需要重建所有源文件和代码隐藏文件,这可能需要几分钟。
有没有办法避免重建所有文件?我是否应该将我们的代码和CMS代码分离到单独的Web应用程序项目(而不是网站项目)?还有其他方法可以提高构建性能吗?
答案 0 :(得分:13)
如果最简单的解决方案是保持.cs结构尽可能相似,那么我会选择安德烈亚斯建议将App_Code移动到至少另外一个项目中。
在VS 2005中编译的Scott Guthrie posted a few tips,您没有指定您所使用的版本,但适用相同的速度提示。他的帖子的第二部分是针对网站项目的。
另一个提示是,如果您正在处理页面而不是App_Code
目录there is a build option that may be useful中的实际代码。转到项目属性> 构建>将从运行启动页面从Build Web站点更改为构建页面,这将在您启动调试器时仅构建启动页面。我不确定这种情况是否经常发生,但是如果你的大部分工作都发生在页面而不是App_Code
中,这将为你节省大量的编译时间。
App_Code必须一起构建,你应该避免在那里使用代码隐藏等。其他地方的一切都应该是。请注意:编译时间(至少在调试中)通常比Web应用程序快30-50倍。话虽这么说,你必须在每次代码更改时重新编译整个应用程序,因此存在缺陷......但是随着命名空间的变化等等,我理解应变补丁会给你带来。
另外,请记住,当您将代码拆分为其他项目时,除了在编译方面更简单外,Visual Studio不需要编译其他依赖项目,除非它们已更改。现在看来,一切都是公平的游戏,因为你的项目中任何可以改变的东西都可能影响到那里的任何东西......但是如果你将它拆分,Visual Studio只会在他们改变或项目时编译你的其他项目他们的引用得到了重建。
答案 1 :(得分:4)
您应该尝试我们最近添加的新OptimizeCompilation标志。
<compilation optimizeCompilations="true">
请参阅我的blog post了解它的含义以及从何处获取。除非您使用的是Win7或正在使用VS2010,否则您需要通过热修复来获取它。
答案 2 :(得分:3)
您应该至少尝试将其转换为Web应用程序,除非有一些政治原因不这样做。它并不像听起来那么难,最大的问题是所有开发人员都可能需要重新配置他们的解决方案。
尝试将App_Code中的代码移动到不同的项目,因为它们实际上不需要在Web站点中。这应该至少有点帮助。
答案 3 :(得分:0)
我认为你最大的问题是大量的文件。我会将Web应用程序分成多个(至少2个)项目:您的Web项目和业务层(或者那种性质的东西)。
我最好的是,应用程序代码中的大多数文件都是很少更改的实体或文件,因此在您的情况下,将它们保存在您的Web应用程序中是没有意义的。
如果您确实在对其他项目中的某个文件进行更改时决定采用此路由,则在部署更改时必须非常小心,因为必须部署整个dll。
答案 4 :(得分:0)
我们的项目遇到了类似的问题,这种方式是通过这种方式构建的,可以热添加新的白标合作伙伴网站。
我们发现加速构建时间的最简单方法是减少Visual Studio挂起的IO瓶颈。获得一个像样的SSD(我们使用OCZ 60gb Summit驱动器)你会发现构建时间大大改善。
另一个节省时间是减少项目所拥有的目录总数。对于Visual Studio遇到的每个新目录,它将启动编译器的新实例。在同一目录中包含尽可能多的文件可以降低此成本。 (要获得使项目可维护的文件夹结构,请使用虚拟文件夹)