我有一个多目标net framework 481和Net 6的解决方案。代码需要在Linux和Windows上运行,所以我需要用适当的#if net 481语句将代码分为两部分,这会在net 6.0目标中生成警告,而不是在框架目标中生成警告。
我只想禁用文件中出现的警告。我试过在文件顶部这样做:
#if NET6_0
#pragma warning disable CSxxxx
#endif
但是它似乎不起作用--我仍然得到同样的警告。如果我在#if块之外禁用警告,警告就会消失,但是鉴于警告的性质,我不想禁用警告(几乎所有“从未使用”或“从未分配给”)存在繁重的变通方案(也就是说,使用更多的#if语句选择性地删除这些项),但如果可能的话,我宁愿避免这样做,因为看起来这样应该可以工作。使用#warning语句完全符合预期。所以我想问题是,为什么CS 0649和CS 0169的行为不一样?
#if NET481
#pragma warning disable CS1030
//1030 is the #warning number
#endif
#warning Just Net6
#pragma warning restore CS1030
#if NET6_0
#pragma warning disable CS1030
#endif
#warning Just Net481
#pragma warning restore CS1030
我也不想只是禁用两个代码基的警告--我确实想知道当其中一个警告出现在两个代码基中时,因为那样就需要调查了。我也不想给代码添加更多的分支--将有问题的变量分段,然后在哪里引用它们等等。
1条答案
按热度按时间efzxgjgh1#
写完这个问题后,我注意到在重新启动Visual Studio 2022时,该行为会消失。我认为,如果有人遇到类似的行为,就值得保留这个问题,因为对我来说,每次尝试禁用新类型的警告或新文件中的相同类型时,似乎都需要重新启动。