2

我们有一个从网页作为 json 传递的模型,并使用控制器中的模型构建来解析 .Net Core 3.1 服务器中的属性。我们想用自定义属性装饰该模型的某些属性,以便“帮助器”方法可以对控制器中的指定属性执行转换。

当我们的模型没有属性时,一切都可以编译并正常工作。

我们为这个模型创建了一个类(LoginModel),并用我们的自定义属性 [Courier] 装饰了一个属性。

namespace THO.Demo.API.Models
{

    public class LoginModel
    {
        public string Email { get; set; }
        [Courier(foo: "secret")]
        public string Secret { get; set; }
        [Courier]
        public string PIN { get; set; }
    }
}

我们为自定义属性创建了一个类

namespace THO.Demo.API.Models
{
    [AttributeUsage(AttributeTargets.Property)]
    public class CourierAttribute : System.Attribute
    {
        private string foobar;
        public CourierAttribute(string foo)
        {
            foobar = foo;
        }

        public CourierAttribute() { }
    }
}

当我尝试构建我们的项目时,我收到以下错误:

错误 CS0246 找不到类型或命名空间名称“CourierAttribute”(您是否缺少 using 指令或程序集引用?)

错误 CS0246 找不到类型或命名空间名称“Courier”(您是否缺少 using 指令或程序集引用?)

这两个文件在同一个项目和同一个命名空间中“并排”。我尝试用同样的问题命名属性“MyCustomAttribute”。当(在 VS2019 中)我点击属性时,我看到一个引用并且可以“跳转”到它,所以看起来至少 VS 知道它们在那里,但项目不会编译。

有什么想法吗?谢谢。

4

1 回答 1

0

我们组织项目的方式是将所有模型 ({projectRoot}/Models) 保存在一个文件夹和命名空间中。我们还为“属性”({projectRoot}/Attributes)创建了一个文件夹,我们将我们的属性类放在其中。当我将“LoginModel”从我们的 Models 文件夹移动到项目的根文件夹中时,编译器能够找到该属性(即使我们将 Attribute 类留在它自己的文件夹中)。这没有任何意义,因为我们所做的只是移动文件。我们没有更改命名空间。这似乎是一种解决方法,但它确实破坏了我们的项目组织。(顺便说一句,当我们没有用属性修饰的属性时,会找到模型并正确编译)。更新 - “未找到”问题位于一个单独的项目 (oops) 中,其中包含指向 LoginModel 的链接。

经验教训 - 仔细检查确切的错误信息。

于 2020-01-06T14:30:36.057 回答