【问题标题】:Visual Studio nullability ref errors show as warnings if defined in Directory.Build.props如果在 Directory.Build.props 中定义,Visual Studio 可空性引用错误将显示为警告
【发布时间】:2021-02-08 15:56:01
【问题描述】:

这可能只是一个临时的 VS 错误,但我想看看是否有人有任何修复,或者是否有我缺少的 VS 设置。

如果我定义可空性错误:

<Nullable>enable</Nullable>
<WarningsAsErrors>nullable</WarningsAsErrors>

我在.csproj 中这样做了,结果如预期的那样:

但是,如果属性是在 Directory.Build.props 文件中定义的(适用于整体解决方案),则它们不再显示为错误:

它仍然会阻止编译,并且您仍然可以在原始文本输出中看到错误。但红色波浪线不显示(只是绿色),更重要的是,错误列表窗格是空的。

有谁知道这是为什么,或者如何解决?我想通过Directory.Build.props 批量定义可空性错误,但它在当前状态下无法使用。

【问题讨论】:

  • 添加Directory.Build.props后是否重启了VS?完全重建/清理解决方案可能会有所帮助,以及删除 .vs 文件夹
  • @jwdonahue 你对那句话有什么参考吗?他们不会在每个属性的基础上“实现对道具/目标文件的支持”。一切都只是“涓涓细流”。你绝对可以在 props 文件中设置 OP 的两个属性......这正是我所做的
  • 愚蠢的问题,但道具文件与项目不在同一个文件夹中(至少与项目上方的解决方案级别/目录相反)?如果您尝试这样做,我看到了意外的行为
  • @pinkfloydx33,根据我的经验,并非一切都可以从 directory.build.props 级别运行(我真的希望他们这样做)。我记得阅读了一些关于某些标签在不同范围内没有意义的文档,但我手头没有参考。
  • @pinkfloydx33,我收回声明。我发现有些东西不起作用,但这并不意味着它们不应该有。

标签: c# visual-studio msbuild nullability


【解决方案1】:

其实automatic msbuild import function有两种方式:Directory.Build.propsDirectory.Build.targets

在你身边,你应该使用Directory.Build.targets而不是Directory.Build.props

正如文档所说,Directory.Build.props 被导入到 csproj 文件的顶部。所以它应该用于定义在全局环境中使用的全局 msbuild 属性。并且上面定义的属性可以被csproj文件覆盖。

您的情况是WarningsAsErrorscsproj 文件中的系统默认值none 覆盖。虽然 csproj 文件中没有显示该值,但它实际上默认显示为 none。当您创建一个没有任何更改的新项目时,它始终显示为警告。

解决方案

因此,您应该将文件重命名为Directory.Build.targets,并且它始终用于覆盖任何操作属性,例如WarningsAsErrors

最喜欢this similar issue

【讨论】:

  • Nullable=enable 可以在 props 文件中设置并且工作正常。在 OP 上我忽略了 WarningsAsErrors 并将其误读为 TreatWarningsAsErrors,后者也可以在 props 文件中设置就好了
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-10-16
  • 1970-01-01
  • 1970-01-01
  • 2010-09-10
  • 2016-07-12
  • 2011-09-02
相关资源
最近更新 更多