昨天在一台电脑上用git新签出一个项目进行build,却出现一堆编译错误,而在原先的开发机上build无任何错误。对比分析后发现,开发机上VS的启动项目(startup project)与这台电脑上的不一样,改为一样后,build立马成功。看来问题与msbuild编译VS项目的顺序有关,而哪个项目作为启动项目会影响到这个编译顺序。
要避免这个问题,就要保证git签出的VS解决方案的启动项目是一致的,然而启动项目的设置并不保存在.sln文件中,而是保存在.suo文件中,但是.suo文件通常不放在git中,因为它经常变动。于是问题变成了——有没有办法直接在.sln文件中设置启动项目呢?
捣鼓了一会发现,如果不设置启动项目,Visual Studio会自动选择一个固定的项目作为启动项目,Visual Studio是根据什么作出这样的选择呢?用文本编辑器打开.sln文件分析后发现原来是第一个"Project...EndProject"。于是,解决方法一跃而出——修改.sln文件,将要设置为默认启动项目的项目的"Project...EndProject"放在第一个。
Project("{guid}") = "default startup project", "default startup project.csproj", "{guid}"
EndProject
...Other projects