108

On a class library project, I set the "Start Action" on the Debug tab of the project properties to "Start external program" (NUnit in this case). I want to set an environment variable in the environment this program is started in. How do I do that? (Is it even possible?)

EDIT:

It's an environment variable that influences all .NET applications (COMplus_Version, it sets the runtime version) so setting it system wide really isn't an option.

As a workaround I just forced NUnit to start in right .NET version (2.0) by setting it in nunit.exe.config, though unfortunately this also means all my .NET 1.1 unit tests are now also run in .NET 2.0. I should probably just make a copy of the executable so it can have its own configuration file...

(I am keeping the question open (not accepting an answer) in case someone does happen to find out how (it might be useful for other purposes too after all...))

2
  • Do you want an environment variable specifically for this one program only? Commented Sep 19, 2008 at 9:21
  • 1
    Just a word of caution here for on Security. If your environmental variable is a "secret" such as an API key, it is not secure to keep it somewhere in your project as suggested in some of the below answers. If the project is then checked in, the secret has been compromised. Commented Nov 6, 2024 at 13:08

13 Answers 13

111

In Visual Studio 2008 and Visual Studio 2005 at least, you can specify changes to environment variables in the project settings.

Open your project. Go to Project -> Properties... Under Configuration Properties -> Debugging, edit the 'Environment' value to set environment variables.

For example, if you want to add the directory "c:\foo\bin" to the path when debugging your application, set the 'Environment' value to "PATH=%PATH%;c:\foo\bin".

Here's a screenshot of the settings dialog

Sign up to request clarification or add additional context in comments.

12 Comments

I'm using VS2008, and my project properties doesn't have "Configuration Properties" or "Debugging" on it. I can't find anything about environment variables anywhere under the project properties. What am I doing wrong?
I will edit this post with a screenshot of where the settings are.
Hi, how did you get to this screen? In my VS2008 and VS2005 project properties seem to look differently, and they don't have environment settings
This is properties for C/C++ projects. I guess you are using C# or VB.NET
Nothing remotely similar to this in VS2017
|
32

In Visual Studio 2022 right-click your project, choose Properties. In the project properties window, select the Resources tab. Then under General, click Open debug launch profiles UI, and start adding your environment variables.

In Visual Studio 2019 right-click your project, choose Properties. In the project properties window, select the Debug tab. Then, under Environment variables start adding your environment variables.

You change the value of your environment from Development to Production. For .Net Core and .Net 5 the property is called ASPNETCORE_ENVIRONMENT.

enter image description here

3 Comments

Pretty sure this only works for .Net Core|5+ because my Debug tab doesn't have that Environment variables stuff at all. Or perhaps it's a Console App vs. WebSite|WebAPI thing?
@ScottFraley The example was through an ASP .NET Core 5 project
@WouterVanherck yes, but the OP (14 yrs ago) was asking about a .NET Framework project or solution, .NET Core | 5+ did not exist yet. And it is going to affect the answer.
20

In Visual Studio for Mac and C# you can use:

Environment.SetEnvironmentVariable("<Variable_name>", "<Value>");

But you will need the following namespace

using System.Collections;

you can check the full list of variables with this:

foreach (DictionaryEntry de in Environment.GetEnvironmentVariables())
{
    Console.WriteLine("  {0} = {1}", de.Key, de.Value);
}

3 Comments

OMG, I've been searching for the last half hour to find that simple call Environment.SetEnvironmentVariable(). Thanks!
This explains how to set an environment variable globally from code. The question explicitly mentions this as undesireable.
Hey I'd love to try this! Could someone let me know how to set it up or where I need to put it?
19

In VS 2022 for .NET 5 and 6 you can set environment variables under properties of project -> Debug -> under General click on 'Open debug launch profiles UI' and scroll down to 'Environment variables'

enter image description here

Comments

12

Visual Studio 2003 doesn't seem to allow you to set environment variables for debugging.

What I do in C/C++ is use _putenv() in main() and set any variables. Usually I surround it with a #if defined DEBUG_MODE / #endif to make sure only certain builds have it.

_putenv("MYANSWER=42");

I believe you can do the same thing with C# using os.putenv(), i.e.

os.putenv('MYANSWER', '42');

These will set the envrironment variable for that shell process only, and as such is an ephemeral setting, which is what you are looking for.

By the way, its good to use process explorer (http://technet.microsoft.com/en-us/sysinternals/bb896653.aspx), which is a sysinternals tool. You can see what a given process' copy of the environment variables is, so you can validate that what you set is what you got.

Comments

3

If you are using VS 2019, Go to Project-> Properties->Debug. check here

Add key and value for your variables. Then it is done. Check launchSettings.json in properties folder you should see your variable there.

Comments

2

Starting with NUnit 2.5 you can use /framework switch e.g.:

nunit-console myassembly.dll /framework:net-1.1

This is from NUnit's help pages.

Comments

2

In Visual Studio 2022, go to solution explorer, right click to project file. Then, click on the Debug link at the left side. Then, click on the Open debug and launch profiles UI. Then, you can add new variables into the field in Environment Variables section. Environment Variables

Comments

1

Set up a batch file which you can invoke. Pass the path the batch file, and have the batch file set the environment variable and then invoke NUnit.

1 Comment

Visual Studio refuses to accept anything but executables (.exe) in the path for the program to start.
0

As environments are inherited from the parent process, you could write an add-in for Visual Studio that modifies its environment variables before you perform the start. I am not sure how easy that would be to put into your process.

Comments

0

I prefer to keep all such definitions in the make files, i.e. in the .*proj or .props - because these are under SCM. I avoid the VS-Gui-Property-Dialogs. A lot of the config you write there goes into some .user, .suo or so, which is usually not under SCM.
E.g. in case of environment variables you could write (using a text editor) something like the following in your .vcxproj:

<PropertyGroup>
  <LocalDebuggerEnvironment Condition="'$(Configuration)'=='Debug'">
ANSWER=42
RUNTIME_DIR="$(g_runtime_dir)"
COLOR=octarin
  </LocalDebuggerEnvironment>
</PropertyGroup>

NOTE that you can use MSBuild Conditions and other build properties to define the environment variables.

NOTE: this works for me with VS2013 and VS2019. I think it is the same for other VS + MSBuild versions.

Comments

-2

If you can't use bat files to set up your environment, then your only likely option is to set up a system wide environment variable. You can find these by doing

  1. Right click "My Computer"
  2. Select properties
  3. Select the "advanced" tab
  4. Click the "environment variables" button
  5. In the "System variables" section, add the new environment variable that you desire
  6. "Ok" all the way out to accept your changes

I don't know if you'd have to restart visual studio, but seems unlikely. HTH

3 Comments

Mark, I believe the requirement was for the environment the program was started in, not the user or system environments.
Yeah, it's an environment variable that influences all .NET apps (COMplus_Version, it sets runtime version) so setting it system wide really isn't an option.
I got thru by defining a user-level Environment variable (My Computer > Properties > Advanced). Launch a new instance of the command shell and echo %NEW_VAR% just to be sure. Start a new instance of devenv and debug away.
-2

You can set it at Property > Configuration Properties > Debugging > Environment enter image description here

2 Comments

Did you even tested that before posting the answer? I guess not. -1.
The only mistake in this answer is that "set" is not needed

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.