如果您的解决方案中的项目具有层次结构,这意味着它们相互引用并具有共同的、最抽象的基础,该基础位于类似于此的结构中:
Common
├── Worker
└── Persistence
└── API
...然后你可以在你的根项目中引用StyleCop.Analyzers包,并将<PrivateAssets>标签的值设置为none:
<ItemGroup>
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>none</PrivateAssets>
</PackageReference>
</ItemGroup>
all 在您将StyleCop.Analyzers 包引用添加到您的项目时默认设置。什么意思?
您可能将依赖项纯粹用作开发工具,并且可能不希望将其公开给将使用您的包的项目。在这种情况下,您可以使用 PrivateAssets 元数据来控制此行为。 ~Docs
因此,默认情况下,StyleCop.Analyzers 只会在您明确引用包的项目中启用。但是在我参与的几乎所有代码库中,都希望在解决方案中的所有项目中强制执行 StyleCode 规则(几乎所有项目,除了具有自动生成代码的项目,例如 EF 迁移)。将包引用元数据中的 all 更改为 none 将导致将样式规则传递给依赖它的所有项目。
解决方案
总之,根项目Common在将<PrivateAssets>设置为none时必须引用StyleCop.Analyzers包:
<ItemGroup>
<PackageReference Include="StyleCop.Analyzers" Version="1.1.118">
<IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
<PrivateAssets>none</PrivateAssets>
</PackageReference>
</ItemGroup>
和 Worker 或 Persistence 或任何其他依赖项目只需要引用前一层,这在任何分层架构中都是常见的做法:
<ItemGroup>
<ProjectReference Include="..\Common\Common.csproj" />
</ItemGroup>