我已经定义了一个自定义程序集属性,并尝试将其称为字符串,就像我之前的帖子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'接受类型的第一个参数 可以找到'对象'(你是否错过了使用指令或者 装配参考?)
对此的任何帮助都将非常感激。
答案 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;