自定义汇编属性到字符串

时间:2014-06-04 19:35:42

标签: c# asp.net-mvc-3 razor .net-assembly

我已经定义了一个自定义程序集属性,并尝试将其称为字符串,就像我之前的帖子Calling Custom Assembly Attributes一样。我现在正试图在c#中完成同样的事情。

我已经定义了我的自定义属性:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Runtime.InteropServices;
using System.Reflection;

namespace authenticator.Properties
{
    public class SemverAttribute : Attribute
    {
        private string _number;

        public string getversion
        {
            get {return _number;}
        }

        public SemverAttribute(string Number)
        {
            _number = Number;
        }
    }
}

我试图用它来打电话:

// Define the semver version number
Assembly assy = Assembly.GetExecutingAssembly();
object[] attr = null;
attr = assy.GetCustomAttributes(typeof(SemverAttribute), false);
if (attr.Length > 0)
  {
    ViewBag.Version = attr[0].getversion;
  }
else
  {
    ViewBag.Version = string.Empty;
  }

然而,在尝试构建时,我得到:

  

'object'不包含'getversion'的定义,没有   扩展方法'getversion'接受类型的第一个参数   可以找到'对象'(你是否错过了使用指令或者   装配参考?)

对此的任何帮助都将非常感激。

1 个答案:

答案 0 :(得分:2)

您只需要演员,Assembly.GetCustomAttributes(xxx)返回类型为Object[]

所以

ViewBag.Version = (attr[0] as SmverAttribute).getversion;

修改

这可以像那样重写(例如)

var attribute = Assembly.GetExecutingAssembly()
                        .GetCustomAttributes(false)
                        .OfType<SemverAttribute>()
                        .FirstOrDefault();

ViewBag.version = (attribute == null)
                  ? string.Empty
                  : attribute.getversion;