Set application output type programmatically
See the question and my original answer on StackOverflowYou can achieve this if you edit the .csproj manually:
- Right click on the project node in Solution Explorer
- Select "Unload Project"
- Right click on the project node in Solution Explorer
- Select "Edit MyApp.csproj"
Move the <OutputType ../>
property group Xml element from the <PropertyGroup .../>
Xml element without Condition
to the property group with conditions corresponding to build configuration / platform.
Before:
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
...
<OutputType>Exe</OutputType>
...
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
...
</PropertyGroup>
After:
<Project ToolsVersion="3.5" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
...
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
...
<OutputType>Exe</OutputType>
...
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
...
<OutputType>WinExe</OutputType>
...
</PropertyGroup>
And finish:
- Right click on the project node in Solution Explorer
- Select "Reload Project"
Here is a proof example:
class Program
{
public static void Main(string[] args)
{
#if DEBUG
Console.WriteLine("test");
#else
Application.Run(new Form1());
#endif
}
}
It works, but I don't think this is officially supported, so use at your own risk :-)