如果引用了特定项目或库,我可以强制 MSBuild 引发错误吗?

Can I force MSBuild to raise an error if a specific project or library is referenced?

我们有一个大型的多项目解决方案,它有许多构建配置和输出目标。

由于各种原因,主要是与过多的引用或额外的文件有关,我想确保其中一些项目不会更新为引用其他一些项目。

例如:

- Foundation.Common.Entities (Simple models, interfaces, etc.)
  - Foundation.Common (References Entities, has additional logic)
  - Foundation.XConnect.CustomTabs (More models, references Foundation.Common.Entities,
                                    must not reference Foundation.Common)
    - Project.Web (References all of the above)

我想阻止人们在 CustomTabs 项目中引用 Foundation.Common,因为它有一些额外的引用不能部署到 [=12] 的某些目标=] DLL部署到.

由于 CustomTabs 也在链的更下方被引用,我不能只为 CustomTabs 树创建一个单独的解决方案。

我并不反对放弃 StyleCop 或类似的东西,但最初更喜欢稍微轻量级的解决方案。

一个简单的目标就可以了;将其添加到 CustomTabs 项目文件中:

<Target Name="BeforeBuild">
  <Error Condition="'%(ProjectReference.Name)' == 'Foundation.Common'"
         Text="Please don't reference Foundation.Common"/>
</Target>

这会遍历所有项目引用,检查名称是否匹配,如果匹配则引发错误。同样的原则也适用于 Reference.Identity