ChatGPT解决这个技术问题 Extra ChatGPT

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

似乎此设置应存储在解决方案文件中,以便在所有用户和部分源代码控制中共享。由于我们不签入 suo 文件,每个用户都必须单独设置,这看起来很奇怪。


O
Oliver

绝对有必要每个人都可以自己定义他们的 StartUp Project,如 Jon has already said。但是有一个专用的默认设置会很棒,而且我可以告诉你,这是可能的!

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

关闭 Visual Studio 并在您喜欢的文本编辑器中打开 .sln 文件。从第 4 行开始,您会看到所有项目都封装在 Project – EndProject 行中。将所需的默认启动项目剪切并粘贴到顶部位置。删除您的 .suo 文件。在 Visual Studio 中打开您的解决方案。达达!


它似乎仅在不在解决方案文件夹中时才有效:根据我对某些解决方案的经验,我的意思是这个技巧适用于根项目。
如果有两个默认项目怎么办 - 我如何默认启动它们?
@Oliver:右键单击解决方案-> 设置启动项目...-> 多个启动项目。一键启动多个。
@jdehaan 我能够将启动项目更改为 VS2013 中的嵌套项目之一(我没有任何旧版本的 Visaul Studio):我已将包含文件夹复制为 .sln 文件中的第一个项目,并将启动项目复制为第二个。
@AdamPlocher我相信如果没有.suo文件,VS更具体地说选择第一个“完全定义”的csproj条目:如果它位于子文件夹中,则必须在任何其他项目“完全定义”之前声明该子文件夹这个。 (如果这对您没有意义,请告诉我。)
P
Palec

在大多数情况下,对此设置默认值确实有意义。

容纳默认启动项目并将其存储在 .sln 文件中会更好,但开发人员可以在他们的 .suo 文件中覆盖它。如果在 .suo 文件中找不到启动设置,则将使用 .sln 中的默认启动项目。

实际上,这是suggested on Visual Studio’s UserVoice


链接的 UserVoice 已“关闭投票”,但没有说明原因。
与公认的答案相比,这绝对是更好的立场。我从来没有在一个团队中工作过,他们认为在每个用户的基础上设置它是一个优势。它只会导致对新克隆等进行额外设置。
J
Jon Skeet

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

如果我有一个包含 10 个文件的解决方案,并且一位开发人员主要测试/使用其中一种工具,那为什么会影响我的启动?

我认为 MS 在这一点上做出了正确的选择。我想开始的项目远非其他开发者想开始的项目。


通常,您的项目很可能是大多数人想要的调试启动项目(例如网站),并且您不希望将类库作为启动项目。我不明白为什么 MS 不能提供适当的机制(而不是看起来像黑客的东西,即将默认的放在 .sln 文件的顶部)来设置全局默认启动项目,然后允许 .如果需要,可以覆盖它。
有,在某种意义上说...移动你想设置为默认启动项目的项目成为 sln 文件中的第一个项目。删除您的 suo 文件,重新打开解决方案并 woila,第一个项目应该是启动。可能还有其他因素造成了这种情况,但是当我注意到一个特别的项目在我从源代码管理中签出一个干净的项目时一直处于默认状态时,我发现了这一点。
这是使用构建服务器时的一个问题,因为它需要将 suo 检入版本控制以设置正确的启动项目,并且将 suo 检入版本控制是一个坏主意。
对不起,乔恩,但我要在这里给你一个-1。我相信开发人员应该有能力下载代码然后按 F5,期望最常用的开发设置能够构建和启动。当然,您应该能够根据个人情况定制您的初创公司,但我们应该能够为大多数用户设置默认值,如上所述。 Oliver 的回答似乎在某种程度上可以做到这一点,尽管似乎多个启动项目仍然无法检查到源代码控制,这是一种耻辱。
不同意它应该是用户设置。 (特别是考虑到必须删除 .suo 文件以纠正 VS 负载问题的频率!)就个人而言,我希望从配置/解决方案中设置启动项目,以便启动项目可以随所选内容而更改配置。在多项目解决方案中,这对我来说更有意义。
P
Palec

我为 Windows 编写了一个名为 slnStartupProject 的小命令行实用程序来自动设置启动项目:

slnStartupProject slnFilename projectName

在使用 cmake 生成解决方案后,我个人使用它来设置启动项目,该解决方案始终将虚拟 ALL_BUILD 项目设置为解决方案中的第一个项目。

source 在 GitHub 上。欢迎分叉和反馈。


谢谢你!我在使用 cmake 时遇到了这个问题,你的实用程序效果很好!
别客气!很高兴它有帮助,因为在我决定永久解决这个问题之前,它一直困扰着我多年。真的不明白为什么人们会为此争论不休,而它在大多数情况下显然很有用。
你……等等……什么? -- 你手动生成你的 .sln 文件? ……这是什么魔法?
c
ctrl-alt-delor

如果您使用的是 GIT,您可以提交默认的 SUO 文件,然后使用

git update-index --assume-unchanged YourSolution.suo

如果您想在默认启动组中拥有多个项目,它也可以使用。我知道的唯一缺点是该命令必须由不想提交 SUO 文件的每个人运行。