Compiler errors 如何将所有SYSLIB警告标记为错误

Compiler errors 如何将所有SYSLIB警告标记为错误,compiler-errors,msbuild,warnings,compiler-warnings,.net-5,Compiler Errors,Msbuild,Warnings,Compiler Warnings,.net 5,我正在将大型项目从NetFramework移植到net5,这会带来大量警告。我想将所有以SYSLIB开头的警告设置为错误。 一种可能的解决方案是在WarnAsError中列出所有警告,但对于这样一个简单的任务来说,这太多了,而且如果在较新版本中出现另一个警告(例如syslib00013),它将是警告,而不是错误 ($WarnAsError);SYSLIB0001;SYSLIB0002;等 写入true不是一个选项 尝试写入$(警告错误);SYSLIB并没有起到任何作用过了一段时间,我找到了一个

我正在将大型项目从NetFramework移植到net5,这会带来大量警告。我想将所有以
SYSLIB
开头的警告设置为错误。 一种可能的解决方案是在
WarnAsError
中列出所有警告,但对于这样一个简单的任务来说,这太多了,而且如果在较新版本中出现另一个警告(例如syslib00013),它将是警告,而不是错误

($WarnAsError);SYSLIB0001;SYSLIB0002;等
写入
true
不是一个选项


尝试写入
$(警告错误);SYSLIB
并没有起到任何作用

过了一段时间,我找到了一个好的、干净的方法

我不得不用task编写



(范围、长度);
foreach(范围中的var范围)
{
字符串include=range.ToString();
字符串前缀=range.GetMetadata(prefixName);
if(string.IsNullOrEmpty(前缀))
{
LogWarning($“元数据{prefixName}未在{include}中找到,将被忽略”);
继续;
}
如果(包括全部(字符数字))
{
列表.添加(新任务项(前缀+包含));
}
else如果(include.Split('-')是{Length:2}splited)
{
int start=int.Parse(拆分为[0]);
int stop=int.Parse(拆分[1]);
对于(int i=开始;i<停止+1;i++)
{
添加(新任务项($“{prefix}{i:0000}”);
}
}
其他的
{
LogWarning($“{include}格式不正确,将被忽略”);
}
}
结果=list.ToArray();
]]>

目标


美元(警告ASERRORS)@(_)
这两个东西都应该位于
目录.Build.targets中,而项目只需要包含特定的警告


这个解决方案有一些缺陷,比如它不支持ItemGroup中的
Exclude
,但对我来说已经足够了