Если вы создаете и публикуете для разных сред выполнения, передавая различные параметры --runtime
(свойство MSBuild RuntimeIdentifier
), вы можете использовать это свойство в файле csproj (что позволяет использовать #if BUILT_FOR_WINDOWS
в коде C #) :
<PropertyGroup>
<DefineConstants Condition="'$(RuntimeIdentifier)' == 'win-x64'">$(DefineConstants);BUILT_FOR_WINDOWS</DefineConstants>
</PropertyGroup>
Однако вы также можете протестировать текущую ОС во время выполнения, используя:
using System.Runtime.InteropServices;
…
if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows))
{
// call windows function here
}
else
{
// do something else here
}
Пока функция, помеченная [DllImport(…)]
, не вызывается в ОС, где не удается найти библиотеку / метод, проблем не должно быть. Обратите внимание, что DllImport()
может также проверять различные библиотеки в зависимости от операционной системы, поэтому DllImport("foo")
будет проверять наличие foo.dll
, foo.dylib
, libfoo.so
и т. Д.