如果引用了特定项目或库,我可以强制 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
。
我们有一个大型的多项目解决方案,它有许多构建配置和输出目标。
由于各种原因,主要是与过多的引用或额外的文件有关,我想确保其中一些项目不会更新为引用其他一些项目。
例如:
- 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
。