如何通过Directory.Build.props将分析器项目引用到除自身外所有项目
实现方案
你完全可以通过MSBuild内置属性获取当前处理的项目信息,按以下规则配置即可实现需求:
核心判断依据
MSBuild提供了内置的MSBuildProjectName属性,可以直接获取当前正在执行构建逻辑的项目名称,也就是你需要的「执行引用操作的发起项目」标识,基于这个属性做过滤即可。
具体配置示例
你只需要在Directory.Build.props中加入如下配置即可,注意把示例中的项目名、项目路径替换成你实际的对应内容:
<Project> <!-- 此处保留你之前已有的其他配置 --> <!-- 仅在非分析器、非分析器测试项目中引入分析器引用 --> <ItemGroup Condition="'$(MSBuildProjectName)' != '你的分析器项目名' And '$(MSBuildProjectName)' != '你的分析器测试项目名'"> <ProjectReference Include="相对路径到你的分析器项目文件\你的分析器项目名.csproj" OutputItemType="Analyzer" ReferenceOutputAssembly="false" /> </ItemGroup> </Project>
配置说明
OutputItemType="Analyzer":标记该引用为分析器项目,不会作为普通程序集引用被带入项目输出ReferenceOutputAssembly="false":避免业务项目编译时依赖分析器的输出程序集,符合分析器的引用规范
更灵活的过滤规则
如果你不想硬编码固定的项目名,也可以约定分析器相关项目的命名规则,比如所有分析器相关项目的名称都包含Analyzers关键词,就可以用模糊匹配的条件:
<ItemGroup Condition="!$(MSBuildProjectName.Contains('Analyzers'))"> <!-- 同上的ProjectReference配置 --> </ItemGroup>
内容的提问来源于stack exchange,提问作者Pavel Voronin
相关产品推荐
相关产品推荐

