简体   繁体   中英

Differences between Visual Studio (.sln) build runner and MSBuild

I'm trying to set TeamCity to do a CI using .Net and configuring build runners I have:

  1. Visual Studio (sln)
  2. MSBuild
  3. Visual Studio 2003

What's the difference? Why three build to work on the same type of project? (With the exception of 2003 which is only for 2003 I believe, Why?)

Taking the issue, we have this build runners for .exe files:

  1. .NET Process Runner
  2. Command Line

The "Command Line" build runner not works with any .net assembly? Why the .Net Process Runner?

Visual Studio (sln)
If your solution is small and you are not required to do fancy things you can use Visual Studio (sln) build runner. It does exactly the same thing as when you do Project->Build (from VS menu). This option is very easy to configure, a few clicks and your CI server compiles your solution.

MSBuild
If you need to do more advanced scenarios , apart from simple compilation, like apply different config files, insert transformed values into config file, deploy binaries etc, you would select MSBuild option. You will know when you need to use this, simply because sln builder will not be capable of doing stuff. This option requires some knowledge of build scripting language, which is a task-based and xml-like.

When you use MSBuild to build a .SLN file ( non MSBuild document ) it generates an in memory MSBuild file that references all of the projects to build in the specified configuration and then executes it. When you use Visual Studio to build you are calling DevEnv.com instead.

There are certain project types ( C++ in 2005/2008 and VDPROJ in 2005/2008/2010 ) that aren't MSBuild files and can't be build using just MSBuild. You will get a build warning saying that one or more projects were not valid MSBuild projects and could not be built.

In geneneral I try to maintain lean and mean build machines and only install Visual Studio if needed.

I've noticed very little between the two. Specifically in our instance we needed to build a .vdproj. Now after googling there where two runners to do this, Command line runner or the Visual Studio (sln). However when doing the Visual Studio (sln) runner type we got the following error: "[Warning] C:\\BuildAgent\\work\\1bd75058d7bca32b\\POS\\PoSWidgetInstaller\\myInstaller.vdproj.metaproj warning MSB4078: The project file "myInstaller\\myInstaller.vdproj" is not supported by MSBuild and cannot be built."

And it doesn't fail when built in the solution. I think Visual Studio (sln) runner type pulls the data from the sln file and then uses it with MSbuild. Not sure can't confirm but just my thoughts on it.

If you use the solution files (Visual Studio) way that means you need to license a copy of Visual Studio for your build server along with the installation/maintenance that comes along with that. If you use MSBuild you don't need any of that, all you need are the .net framework installs. The only real difference between the two is that Visual Studio has all sorts of environment variables set and utilitizes things like build order. While MSBuild does not have any environment variables set by default, and doesn't recognize build order, it only reconginizes the depencies. It will be slightly easier though in Visual Studio and you won't run into those cases occasionaly where you were depending on visual studio to cover up some sloppiness.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM