I know that there is a way to conditionally compile for target frameworks eg #if net461 ....#elif .... But is there a way to conditionally compile for specific os Like target _os_MAC or target_os_win
If there is can someone guide me to the documentations or tutorials to how to implement it?
Part 2: Also , is there a way to create a custom tag so that I do not have to change every tag whenever there is a change to the new target os or framework .eg from net461 to net471
It's an old question, but if someone comes here now, there's a better option.
You do not need to have different configurations and select manually which configuration to use.
You can use System.Runtime.InteropServices.RuntimeInformation. https://learn.microsoft.com/en-us/dotnet/api/system.runtime.interopservices.runtimeinformation?view=netframework-4.8
There's a good manual here: https://blog.magnusmontin.net/2018/11/05/platform-conditional-compilation-in-net-core/ Minimal info from the link: Change your .csproj file
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp2.0</TargetFramework>
<IsWindows Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Windows)))' == 'true'">true</IsWindows>
<IsLinux Condition="'$([System.Runtime.InteropServices.RuntimeInformation]::IsOSPlatform($([System.Runtime.InteropServices.OSPlatform]::Linux)))' == 'true'">true</IsLinux>
</PropertyGroup>
<PropertyGroup Condition="'$(IsWindows)'=='true'">
<DefineConstants>Windows</DefineConstants>
</PropertyGroup>
<PropertyGroup Condition="'$(IsLinux)'=='true'">
<DefineConstants>Linux</DefineConstants>
</PropertyGroup>
This will conditionally define constants. Which you later use like so:
#if Linux
Console.WriteLine("Built on Linux!");
#elif Windows
Console.WriteLine("Built in Windows!");
#endif
This answer assumes you're asking about custom pre-processor symbols (that is how I have interpreted it - do correct me if I am wrong.
You could use a custom build configuration:
Start by going into the build Configuration Manager..
Next, create a new build configuration. You can copy the configuration from an existing one:
Then, right click on your Project and go to Properties. Under the build tab, define a conditional compilation symbol:
Do the same for Windows.
Then you can write conditional steps like the below:
class Program
{
static void Main(string[] args)
{
#if MACOS
Console.WriteLine("OSX");
#elif WINDOWS
Console.WriteLine("Windows");
#endif
Console.Read();
}
Depending on your chosen build configuration .. you'll either get:
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With