与VS 2017的.NET标准/ .NET核心代码分析和代码合同

时间:2017-06-01 06:17:30

标签: c# .net-core .net-standard

.NET Standard 不支持静态代码分析和代码合约吗?

VS 2017和.NET Standard 1.6或.NET核心类库似乎没有运行代码分析的选项。

1 个答案:

答案 0 :(得分:2)

您可以使代码约定适用于.NET标准项目(我有);但是,没有VS 2017 IDE支持在任何项目中启用代码合同,更不用说netstandard项目了。

如果您在具有portable PDBs的项目上运行代码合同重写器(ccrewrite),则它当前会崩溃并烧毁。在我看来,netstandard项目应该有便携式PDB(它是唯一可以跨平台工作的PDB格式)。

对我而言,这是关于长期使用网络标准库的代码合同的交易破坏者。但是,我们有一些内部netstandard库暂时使用带有代码约定的旧版/ Windows PDB。我们只在遗传/仅使用Windows的PDB中使用我们的netstandard库,因为在保留项目完整性的同时,我们要立即撕掉所有代码合同代码。

在我对VS 2017支持代码合同的另一个问题的回答中,I provide information on how to manually enable Code Contracts for VS 2017 builds。如果您还更改了PDB类型,这将适用于netstandard项目。这可以使用项目属性UI完成,或者通过向csproj或导入的msbuild文件添加以下内容:

  <!-- For netstandard and netcoreapp, DebugType must be full or pdbonly for ccrewrite to work -->
  <PropertyGroup Condition=" '$(Configuration)' != 'Release' ">
    <DebugType>full</DebugType>
  </PropertyGroup>

  <PropertyGroup Condition=" '$(Configuration)' == 'Release' ">
    <CodeContractsRuntimeCheckingLevel>ReleaseRequires</CodeContractsRuntimeCheckingLevel>
    <DebugType>pdbonly</DebugType>
  </PropertyGroup>