我们有一个项目,我们使用StyleCop和代码分析来验证代码的结构。我们已将警告视为两种机制的错误。为什么在C#项目中进行/优化会生成更多的代码分析警告,而不是启用此功能?
然而,我们发现了一种我们无法解释的平庸行为。我们有一个调试和发布配置。在我们的调试配置中,我们没有得到一个CA警告,而在我们的发布配置中收到此警告。我们开始考虑这两种配置之间的差异,并且我们发现优化复选框是为什么我们在发布期间得到此警告但不在调试过程中的差异。
我们有以下配置。
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
<DebugSymbols>true</DebugSymbols>
<DebugType>full</DebugType>
<Optimize>false</Optimize>
<OutputPath>bin\Debug\</OutputPath>
<DefineConstants>DEBUG;TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Release|AnyCPU' ">
<DebugType>pdbonly</DebugType>
<Optimize>true</Optimize>
<OutputPath>bin\Release\</OutputPath>
<DefineConstants>TRACE</DefineConstants>
<ErrorReport>prompt</ErrorReport>
<WarningLevel>4</WarningLevel>
</PropertyGroup>
当我们将优化值设置为true以进行调试时,我们还会发出CA警告。当我们将此设置为false时,警告消失。这也适用于警告CA1806。无论优化值如何,其他CA警告都能正确显示。
触发此警告的代码是以下代码。这只是测试代码,但它模拟了我们的真实情况。一个分配了默认值但从未在任何代码中使用的变量。
public CourseService(IOrtContext context)
{
this.context = context;
var defaultDate = new DateTime(1900, 1, 1);
}
那么,有没有人知道为什么CA1806显示取决于是否启用优化?
警告是合法的,因为文档说它是在创建新对象时触发的,但从未使用*。在调试模式下,您是否正面使用'defaultDate'也不会使用? –
该警告确实是合法的。我预计它也会发生在这个测试代码中,但通过上面的调试配置,这个警告不会出现。我确定这个defaultDate不用于任何调试模式代码。上面的代码是我正在使用的确切代码。这个变量在构造函数中作为范围(用于测试),并在构造函数中作为最后一行。 –