当前位置:  开发笔记 > 编程语言 > 正文

Visual Studio中大型解决方案的最佳实践(2008)

如何解决《VisualStudio中大型解决方案的最佳实践(2008)》经验,为你挑选了4个好方法。

我们有一个包含大约100多个项目的解决方案,其中大多数是C#.当然,开放和构建需要很长时间,所以我正在寻找这种野兽的最佳实践.我希望得到答案的问题包括:

你如何最好地处理项目之间的引用

应该"打开或关闭本地"吗?

每个项目应该构建到自己的文件夹,还是应该构建到相同的输出文件夹(它们都是同一个应用程序的一部分)

解决方案的文件夹是组织内容的好方法吗?

我知道将解决方案分解为多个较小的解决方案是一种选择,但是它带有自己的重构和构建头痛,所以也许我们可以将其保存为单独的线程:-)



1> Sayed Ibrahi..:

您可能对我编写的这两篇MSBuild文章感兴趣.

MSBuild:创建可靠构建的最佳实践,第1部分

MSBuild:创建可靠构建的最佳实践,第2部分

特别是在第2部分中,您可能需要查看构建大型源树的部分.

尽管如此,请简要回答您的问题:

CopyLocal?当然要关闭它

构建一个或多个输出文件夹?构建到一个输出文件夹

解答文件夹?这是一个品味问题.

Sayed Ibrahim Hashimi

我的书:Microsoft Build Engine内部:使用MSBuild和Team Foundation Build


-1为UNCONDITIONAL建议禁用CopyLocal.设置CopyLocal = false可能会在部署期间导致不同的问题.请参阅我的博客文章"请勿更改"将本地"项目引用复制为false,除非了解子序列."(http://geekswithblogs.net/mnf/archive/2012/12/09/do-not-change-copy-local - 项目引用到假unless.aspx)

2> si618..:

+1用于节省使用解决方案文件夹来帮助整理内容.

项目构建+1到自己的文件夹.我们最初尝试了一个常见的输出文件夹,这可能导致查找过时引用的细微和痛苦.

FWIW,我们使用项目参考解决方案,虽然现在nuget可能是一个更好的选择,但已经发现svn:externals适用于第三方和(框架类型)内部组件.刚刚养成使用特定修订号而不是HEAD的习惯,当引用svn:externals时(有罪有罪:)


+1我也常常遇到常见的输出文件夹解决方案.我不明白"解决方案的项目参考"是什么意思,请再解释一下......

3> Nicolas Dori..:

卸载不经常使用的项目,并购买SSD.SSD不会缩短编译时间,但Visual Studio的打开/关闭/构建速度提高了两倍.


值得注意的是,卸载项目是按用户设置的,因此团队中的开发人员只能加载他们关心的项目.这确实帮助了我们的团队.

4> Thomas Bratt..:

我们有类似的问题,因为我们有109个单独的项目要处理.根据我们的经验回答原始问题:

1.如何最好地处理项目之间的引用

我们使用'添加引用'上下文菜单选项.如果选择"项目",则默认情况下会将依赖关系添加到我们的单个全局解决方案文件中.

2.应该"打开或关闭本地"吗?

关闭我们的经验.额外的复制只会增加构建时间.

3.每个项目是应该构建到自己的文件夹,还是应该构建到相同的输出文件夹(它们都是同一个应用程序的一部分)

我们的所有输出都放在一个名为'bin'的文件夹中.这个想法是该文件夹与部署软件时的相同.这有助于防止开发人员设置与部署设置不同时发生的问题.

4.解决方案文件夹是组织内容的好方法吗?

没有我们的经验.一个人的文件夹结构是另一个人的噩梦.深度嵌套的文件夹只会增加查找任何内容所需的时间.我们有一个完全扁平的结构,但命名我们的项目文件,程序集和命名空间相同.


我们构建项目的方式依赖于单个解决方案文件.即使项目本身没有改变,建立这个也需要很长时间.为了解决这个问题,我们通常会创建另一个"当前工作集"解决方案文件.我们正在处理的任何项目都会添加到此中.虽然我们看到的一个问题是Intellisense对于不在当前集合中的项目中定义的类型失败,但构建时间得到了极大的改进.

我们的解决方案布局的部分示例:

\bin

OurStuff.SLN

OurStuff.App.Administrator
OurStuff.App.Common
OurStuff.App.Installer.Database
OurStuff.App.MediaPlayer
OurStuff.App.Operator
OurStuff.App.Service.Gateway
OurStuff.App.Service.CollectionStation
OurStuff.App.ServiceLocalLauncher
OurStuff.App.StackTester
OurStuff.Auditing
OurStuff.Data
OurStuff.Database
OurStuff.Database.Constants
OurStuff.Database.ObjectModel
OurStuff.Device
OurStuff.Device.Messaging
OurStuff.Diagnostics
...
[etc]

推荐阅读
和谐啄木鸟
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有