views:

273

answers:

3

We're creating an application that understands some command-line parameters. There are some default's we would like to supply on the command-line when debugging, and these are easily set in the project settings as explained here.

The thing is visual studio stores these settings in a *.csproj.user file, and the default settings for integrated source control do not check-in *.user files. We would like to just have these default command-line parameters in everyone's IDE when debugging this project.

Often (but not always) when visual studio guides you into doing things a certain way it is for good reason. We probably don't want to just check-in someone's .csproj.user file... right?

This question is has a few parts:

  • Why does Visual Studio store this particular setting per user?
  • Is there a way to alter this behavior? - Would doing so bring bad juju?
  • Under these circumstances is it OK to check-in and share a .user file?
  • Is there a better way to accomplish what we are trying to do here?

Thank you -

+2  A: 

I would not recommend checking in the user file because, as you said, this is per user. If someone checks out your "default" user file and then makes any personalized configuration changes, those will be reflected back in the user file and (most likely) will be reflected in the source control.

If you want someone to set command-line parameters for debugging, I would adjust the project file to include these - don't include them in the user file. (It is okay to check in the .proj file, and I typically do for my team projects.)

JasCav
I have seen some very confused developers that did not realize that the .user file was in source control (or didn't know what it was for).
Eric J.
So if manually "merge" the xml that supplies the command-line parameters in the .user settings file with the main project file... will that do what I am hoping... or just mangle things?
DanO
@Jason: How would you adjust the project file to contain command line parameters?
sbi
I think I misread part of your post. I still stick to not checking in the .user file. I have to agree with your first bulleted point...no clue why Visual Studio does this. I just assumed that it went into the project file since that is how it is for a project I am working on. A better alternative may be to document the settings and let each user specify where those settings are located. Or, provide an initial config file that the users can just copy into their workspace.
JasCav
+3  A: 

Maybe you could alter the program to optionally read its parameters from a configuration file as well as from the command-line (and then check-in a copy of that configuration file).

ChrisW
Good point. This meets the same need and bypasses the issue.
DanO
Putting the default debugging command-line options into a .config file bypasses the issue but also forces in new behavior that may not have been wanted (we can live with it in this case.) In general I now see that relying on default debugging command-line parameters across the team and in source control is a bad thing. It adds wrinkles to the CI (auto) builds and unit tests. We are effectively making "debug" parameters into a source artifact... not good.So in general, the best answer is: "Don't do that - find another way" and in this case a .config file is fine. Thanks.
DanO
+3  A: 

As detailed here simply moving the debug startup options from the .user file into the csproj file works just fine.

tsupe