为什么“设置为启动项”选项存储在suo文件而不是sln文件中?

195

看起来这个设置应该存储在解决方案文件中,以便它可以在所有用户之间共享并成为源代码控制的一部分。由于我们不检查suo文件,所以每个用户都必须单独设置这个设置,这似乎很奇怪。

5个回答

412

众所周知,正如Jon所说,每个人都必须能够定义他们自己的创业项目。但是,拥有一个专门的默认项目会很方便,而且据我所知,这是可能的!

如果您的解决方案目录中没有 .suo 文件,则 Visual Studio 会选择您 .sln 文件中的第一个项目作为默认启动项目。

  1. 关闭 Visual Studio 并在您喜欢的文本编辑器中打开 .sln 文件。从第4行开始,您将看到所有项目包含在 Project - EndProject 行中。

  2. 将所需的默认启动项目剪切并粘贴到顶部位置。

  3. 删除您的 .suo 文件。

  4. 在 Visual Studio 中打开您的解决方案。完成!


4
似乎只有不在解决方案文件夹中才能起作用:我的意思是,根据我在一些解决方案中的经验,这个技巧仅适用于根项目。 - jdehaan
3
如果有两个默认项目,我该如何将它们都设为默认启动? - Amy B
8
@Oliver:右键解决方案 -> 设置启动项目... -> 多个启动项目。一次单击可启动多个项目。 - Anton
5
@jdehaan 我成功地将启动项目更改为VS2013中的一个嵌套项目(我没有任何旧版本的Visual Studio):我将包含文件夹复制为.sln文件中的第一个项目,将启动项目作为第二个项目。 - Aleksei Poliakov
3
我认为如果没有 .suo 文件,Visual Studio 会更具体地选择第一个“完全定义”的 csproj 条目:如果它位于子文件夹中,则必须先声明子文件夹,然后才能像这样“完全定义”任何其他项目。 (如果您不理解,请告诉我。) - Efrain
显示剩余21条评论

53
在大多数情况下,这样做是有道理的。但是,最好能够容纳一个默认的启动项目并将其存储在.sln文件中,但可以由开发人员在其.suo文件中覆盖。如果在.suo文件中找不到启动设置,则会使用.sln中的默认启动项目。
实际上,Visual Studio的UserVoice上已经建议过这样做

1
该链接的UserVoice处于“投票关闭”状态,但没有解释原因。 - yzorg
2
这绝对是比被接受的答案更好的立场。我从未在一个团队中工作过,他们认为按用户设置这个是一个优势。这只会导致在新克隆上进行额外的设置等问题。 - Trevor Reid
用户反馈已关闭,但问题已经在https://developercommunity.visualstudio.com/t/SolutionProject-should-support-a-defaul/1024145?q=Default+startup+project重新提出。 - undefined

40

为什么应该是一个非用户特定的偏好?

如果我的方案中有10个文件,而一个开发者主要测试/使用其中一个工具,为什么那会影响我要启动什么?

我认为微软在这方面做出了正确的选择。我想要启动的项目远远不一定是其他开发者想要启动的项目。


148
经常情况下,你会有一个项目非常可能是大多数人用于调试(例如网站)的期望启动项目,而你不想将一个类库作为启动项目。我不明白为什么微软不能提供一个合适的机制(不是看起来像个hack的方法,比如在.sln文件中将默认项目放在顶部)来设置全局默认的启动项目,然后允许.suo文件覆盖它(如果需要)。 - Jez
29
某种程度上来说,将您想要设置为默认启动项目的项目移动到sln文件中的第一个项目位置。删除您的suo文件,重新打开解决方案,那么第一个项目就应该是启动项目了。可能还有其他因素影响此设置,但当我从源代码控制检出干净项目时,发现其中一个项目总是默认设置为启动项目。 - misteraidan
2
这是在使用构建服务器时的一个问题,因为它需要将suo检入版本控制以设置正确的启动项目,而将suo检入版本控制是一个不好的想法。 - markshancock
25
抱歉,Jon,但我要给你打个负分。我认为开发人员应该具备下载代码并按F5键的能力,期望最常见的开发设置进行构建和启动。当然,您应该有能力根据个人情况定制自己的启动项,但我们应该能够为大多数用户设置默认值,如上所述。Oliver的答案似乎在某种程度上做到了这一点,尽管似乎仍然无法将多个启动项目提交到源代码控制中,这很遗憾。 - Stephen Holt
3
不同意应该作为用户设置。尤其是考虑到需要经常删除.suo文件以纠正VS加载问题的情况下!就我个人而言,我希望启动项目可以从配置/解决方案中设置,这样启动项目就可以随所选配置而更改。在一个多项目的解决方案中,这对我来说更有意义。 - SteveCinq
显示剩余21条评论

3
我为Windows编写了一个小型命令行实用程序,名为slnStartupProject,可自动设置启动项目:
slnStartupProject slnFilename projectName

我个人使用它来在使用cmake生成解决方案后设置启动项目,该过程总是将虚拟的ALL_BUILD项目设置为解决方案中的第一个项目。 源代码存放在GitHub上,欢迎派生和反馈。

谢谢!我正好遇到了cmake的这个问题,你的工具非常好用! - sippa
1
不客气!很高兴能帮到你,因为这个问题困扰了我多年,直到我决定彻底解决它。我真的不明白为什么人们会在这个问题上进行哲学上的争论,而它在大多数情况下显然是有用的。 - michaK
你...等等...什么?-- 你手动生成.sln文件?...这是什么魔法? - BrainSlugs83
这个命令行工具支持设置两个项目作为启动项吗? - CesarB

2
如果您正在使用GIT,可以提交默认的SUO文件,然后将其标记为未更改,方法如下:
git update-index --assume-unchanged YourSolution.suo

如果您希望在默认启动组中拥有多个项目,这也适用于您。我所知道的唯一缺点是,必须由每个不想提交SUO文件的人运行此命令。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接