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

Ame*_*eya 6 c# .net-core .net-standard

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

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

cri*_*mbo 2

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

如果您在具有可移植 PDB 的项目上运行代码契约重写器 (ccrewrite),目前它会崩溃并烧毁。在我看来,netstandard 项目应该具有可移植的 PDB(这是唯一可以跨平台工作的 PDB 格式)。

对我来说,这对于长期在 netstandard 库上使用代码契约来说是一个破坏性的因素。然而,我们有一些内部网络标准库暂时使用带有代码契约的旧版/Windows PDB。我们将旧版/仅限 Windows 的 PDB 与我们的 netstandard 库一起使用,只是因为在保留项目完整性的同时撕掉所有代码契约代码需要付出太多的直接努力。

在我回答有关 VS 2017 对代码契约的支持的另一个问题时,我提供了有关如何手动启用 VS 2017 版本的代码契约的信息。如果您还更改 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>
Run Code Online (Sandbox Code Playgroud)