我有以下XML (它是一个dotnet项目文件):
<Project Sdk="Microsoft.NET.Sdk">
<ItemGroup>
<None Remove="appsettings.json" />
</ItemGroup>
<ItemGroup>
<ProjectReference Include="LoadA1Test" />
</ItemGroup>
</Project>和下列规则:
package main
project_reference = input.Project.ItemGroup[i].ProjectReference
deny[msg] {
not project_reference[i]["-Include"] = "XYZ"
msg = sprintf("in %s works \n", [project_reference[i]])
}
deny[msg] {
not contains(project_reference[i]["-Include"],"XYZ")
msg = sprintf("in %s doesn't work \n", [project_reference[i]])
}当我尝试使用second验证时,第一条规则会如预期的那样失败,但是第二条规则会通过。我试了几个选择,但我不知道我做错了什么。
发布于 2021-10-25 14:50:29
有几件事看上去有点奇怪:
项组的
!= x来检查字符串是否等于x.。
而且我不认为您需要重用i迭代器,因为您正在项目引用中查找一个映射键。像这样的事情可能会起作用:
package main
deny[msg] {
project_reference := input.Project.ItemGroup[_].ProjectReference
project_reference["-Include"] != "XYZ"
msg = sprintf("-Include (%v) != XYZ", [project_reference["-Include"]])
}
deny[msg] {
project_reference := input.Project.ItemGroup[_].ProjectReference
not contains(project_reference["-Include"], "XYZ")
msg = sprintf("-Include: (%v) does not contain XYZ", [project_reference["-Include"]])
}虽然我不确定逻辑,因为如果-Include值不是XYZ,那么第一个规则总是失败的,所以如果-Include不包含该值,那么添加另一个规则也没有多大意义。
https://stackoverflow.com/questions/69709393
复制相似问题