Changing csproj OutputType based on project configuration
In the top of your .csproj file you will have two sections that look a bit like this:
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|x86' ">
<OutputType>Library</OutputType>
<!-- Other properties go here -->
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|x86' ">
<OutputType>Exe</OutputType>
<!-- Other properties go here -->
</PropertyGroup>
Add your OutputType
elements to these two conditional PropertyGroup
sections and make sure that you remove all other OutputType
elements - I've just tested it and it does exactly what you are asking for.
Yes this is very similar to what you have already done, but I know for a fact that the above method works because I've just tried it - my only guess is that something somewhere else in your build is messing things up.
Related videos on Youtube
Guy Danus
Software Engineer at Microsoft Havok. Love to write code in my spare time.
Updated on June 11, 2022Comments
-
Guy Danus 7 months
I need to build a C# project as either WinExe or Library depending on the project's configuration.
I've tried both of these methods with no luck:
1) In the general PropertyGroup:
<OutputType Condition=" '$(Configuration)' == 'Release' ">WinExe</OutputType> <OutputType Condition=" '$(Configuration)' == 'Debug' ">Library</OutputType>
2) In a conditional PropertyGroup:
<PropertyGroup Condition=" '$(Configuration)' == 'Release' "> <OutputType>WinExe</OutputType> </PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)' == 'Debug' "> <OutputType>Library</OutputType> </PropertyGroup>
Neither of these methods work and the OutputType is always WinExe. The odd thing is that if I change all instances of WinExe to Library, then it's always Library. This is making me think that it is reading them successfully, but either in a strange order or that WinExe takes precedence over Library.
Any ideas?
-
Brian Kretzler over 11 yearsAs long as your OutputType declaration appears after any others, thus overwriting it, what you have above should work. But it also needs to be prior to any import statements that contain further properties that are based on the value of $(OutputType)
-
-
Guy Danus over 11 yearsAh, what we did does seem to work fine. Visual studio just reports it incorrectly, but it does in fact build the correct output type.