gpt4 book ai didi

c# - 使用 PostSharp 一次验证多个项目中的类名

转载 作者:行者123 更新时间:2023-12-04 10:39:36 26 4
gpt4 key购买 nike

我有一个解决方案,其中包含各种命名空间中的多个 API 项目。我正在寻找一种方法来同时验证所有 API 项目,以检查其中任何一个项目中是否有一个与另一个类同名的类( Controller )。

假设我有以下类(class):

Api1.DogController
Api1.CatController

Api2.BirdController

现在有人添加了一个新的 CatControllerApi2所以我们有
Api2.BirdController
Api2.CatController

我希望 PostShat 抛出构建错误,因为一个名为 CatController 的类已存在于 Api1项目。而且我宁愿避免需要向应该检查的类添加任何属性。我可以引用 AssemblyInfo 中的约束API 项目的文件。

我试着用 ScalarConstraint 做一些事情和类型,像这样:
[MulticastAttributeUsage(MulticastTargets.Class)]
public class ControllerNamesValidation : ScalarConstraint
{
public override void ValidateCode(object target)
{
var targetType = (Type)target;

//various experiments with targetType.GetMembers() or targetType.GetNestedTypes() here...
}
}

但失败了。

最佳答案

PostSharp 分别处理每个项目。可以在构建时使用 ScalarConstraint 在解决方案范围内强制执行规则,但您需要将有关使用的 Controller 名称的信息存储在某处(例如文件系统或注册表)。这需要同步,这可能会增加编译时间。

如果您的所有 API 库都被单个项目引用,您也可以通过以程序集而不是类为目标,然后在约束逻辑中反射(reflect)程序集来实现相同的效果(请参阅 Assembly.GetReferencedAssemblies )。您可以通过自定义属性的存在来过滤已处理的程序集。

关于c# - 使用 PostSharp 一次验证多个项目中的类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59989374/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com