Closed gaufung closed 2 months ago
.NET
开源后一直声明式跨平台的开发语言,但是由于一些历史原因,部分 API 仍然是 Windows 独有的,那么如果在代码中使用了他们,就会得到一个编译的时候的警告或者错误,那么该怎么解决他们呢?有三种方法
如果编译发出警告的信息,可以通过在上下文见天 #pragma
来关掉警告
#pragma warning disable CA1416
Type type = Type.GetTypeFromProgID(progId);
#pragma warning restore CA1416
或者在 csproj
文件中添加 NoWarn
的属性
<PropertyGroup>
...
<NoWarn>CA1416</NoWarn>
</PropertyGroup>
SupportedOSPlatform
在使用的方法中添加 SupportedOSPlatform
的注解
[SupportedOSPlatform("windows")]
public static object CreateComInstance(string progId)
{
Type type = Type.GetTypeFromProgID(progId);
if (type == null)
return null;
return Activator.CreateInstance(type);
}
在这个这种情况下,如果项目的运行时包含了 Windows
, 那么就不会出现编译警告
<TargetFramework>net8.0-windows</TargetFramework>
另外一种方式将 Windows 相关的代码按照条件编译单独设置
#if NETFRAMEWORK // .NET Framework only
...
#endif
在这里,只有 .NET Framework
运行时才看到相关的方法的定义。
https://weblog.west-wind.com/posts/2024/Jul/18/Dealing-with-Platform-Specific-Classes-and-Methods-in-CrossPlatform-NET