所以我有一个C#类库项目,我只打算在Windows上使用。它包含一些使用System.Drawing.Image
类的类,该类仅在Windows上可用。升级到Visual 2022并将目标框架设置为.NET 6.0之后,我看到一堆警告:
“
CA1416
”此呼叫站点可在所有平台上访问。'SomeClass.SomeMethod‘仅支持在:'windows’上。
有关一些示例,请参见下面的屏幕截图:
从某种意义上说,VS2022扫描了库并找到了我在库中使用的所有特定于平台的代码,这是很酷的。但是我想告诉VS,我只打算在windows上使用这个库,它可以消除所有这些警告。
首先,我在项目属性中检查了Target framework
选项,但没有看到任何特定于windows的目标。
然后,我决定直接编辑项目的.csproj
,并将Target framework
更改为
<TargetFramework>net6.0</TargetFramework>
至
<TargetFramework>net6.0-windows</TargetFramework>
但是,不幸的是,即使在重新编译之后,这也没有使警告消失。因此,我对CA1416
警告做了一些解读,并在Microsoft中肯定地指出,在评估此警告时,目标框架名称被忽略,但是VS确实根据影响该警告的TFM向项目添加了一个属性,但只有在项目配置为动态生成AssemblyInfo.cs
文件时才会这样做。但是,唉,我的项目的AssemblyInfo.cs
被维护为一个实际的文件,而不是让它在构建时自动生成。
因此,在这一点上,我准备抛出球,并禁用我的项目的CA1416
警告。因此,在项目的.proj
文件中,我为发行版和调试版本添加了CA1416
,如下所示:
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<NoWarn>1701;1702;CA1416;</NoWarn>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Release|AnyCPU'">
<NoWarn>1701;1702;CA1416;</NoWarn>
</PropertyGroup>
人们可能会认为,这将是那些令人讨厌的警告的结束。(叹息)事实证明,在重建项目之后,仍然会出现警告。有什么建议吗?我在认真地听呢。
发布于 2021-12-08 09:23:07
更新:
在我们的一位开发人员试图用Visual Studio 2022 for Mac Preview 1
在他的苹果电脑上启动解决方案之前,针对Windows的效果很好。
https://learn.microsoft.com/en-us/dotnet/fundamentals/code-analysis/quality-rules/ca1416
阅读.NET 6的“打破规则”,微软有一个关于System.Drawing.Common
的章节。
他们的建议如下:
要将这些API用于跨平台应用程序,请迁移到以下库之一:
或者,通过将System.Drawing.EnableUnixSupport运行时配置开关设置为runtimeconfig.json文件中的true,可以启用对非Windows平台的支持:
{
"runtimeOptions": {
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
}
增加这个配置开关是为了让跨平台应用程序在很大程度上依赖于这个包来迁移到更现代的库。然而,非Windows错误将不会被修复。此外,我们可能在将来的版本中完全删除对非Windows平台的支持,即使您使用运行时配置开关启用它。 备注 尽管运行时开关名为System.Drawing.EnableUnixSupport,但它适用于各种非Windows平台,如macOS和Android,这些平台通常被认为是Unix的风格。
尽管Microsoft.Maui.Graphics
处于预览阶段,并且被认为是一个试验性库,但考虑到微软将该库作为推荐的操作库,我尝试使用它。
一开始看起来很有希望,但后来我在他们的IImage Downsize
方法中遇到了一个bug。
https://github.com/dotnet/Microsoft.Maui.Graphics/issues/247
在此之前,我的临时解决方案是使用目标框架.NET 6、Target (无),然后使用Exclude specific warnings as errors
,因为我们已经启用了Treat warnings as errors
。
我还在我们的web项目根目录中创建了一个具有以下值的runtimeconfig.template.json
:
{
"runtimeOptions": {
"configProperties": {
"System.Drawing.EnableUnixSupport": true
}
}
}
原版:
您可以使用dotnet_diagnostic.CA1416.severity = none
来取消警告,但是imao如果您只打算在Windows上使用它,则应该将目标OS设置为项目的Windows
,这将修复警告。
来源:
发布于 2021-11-17 20:12:26
通过将以下装饰器添加到包含类的顶部,我成功地删除了CA1416警告:
[System.Runtime.Versioning.SupportedOSPlatform("windows")]
我只在VS2019上使用.net 5,但它可能对您有用。我在VS2019 .net5控制台项目(类程序顶部)和.net5类库(类顶部)中尝试了这一点。我添加了System.Common.Drawing nuget包。我的代码包括:
string inputPath = @"C:\mypath\mypng.png";
Image i = Image.FromFile(inputPath);
发布于 2021-11-12 13:58:46
解决此问题的一种方法是为解决方案创建一个.editorconfig,然后将以下行添加到该.editorconfig文件中:
dotnet_diagnostic.CA1416.severity = none
这将使所有“验证平台兼容性”警告消失。
https://stackoverflow.com/questions/69936093
复制相似问题