自定义程序集属性到字符串 [英] Custom Assembly Attribute to String
问题描述
我定义了一个自定义程序集属性,并试图将其调用为一个字符串,就像我之前的帖子调用自定义程序集属性.我现在正试图在 c# 中完成同样的事情.
I have defined a custom assembly attribute and am trying to call it into a string much like my previous post Calling Custom Assembly Attributes. I am now trying to accomplish the very same thing in c#.
我已经定义了我的自定义属性:
I have defined my custom attribute:
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;
}
但是,当我尝试构建时:
However when trying to build I get:
'object' 不包含 'getversion' 的定义,也没有扩展方法getversion"接受类型的第一个参数可以找到对象"(您是否缺少 using 指令或汇编参考?)
'object' does not contain a definition for 'getversion' and no extension method 'getversion' accepting a first argument of type 'object' could be found (are you missing a using directive or an assembly reference?)
对此的任何帮助将不胜感激.
Any help on this would be much appreciated.
推荐答案
你只需要一个演员表,因为 Assembly.GetCustomAttributes(xxx)
返回类型是 Object[]
you just need a cast, as Assembly.GetCustomAttributes(xxx)
return type is Object[]
所以
ViewBag.Version = (attr[0] as SmverAttribute).getversion;
编辑
这可以像那样重写(例如)
this could be rewritten like that (for example)
var attribute = Assembly.GetExecutingAssembly()
.GetCustomAttributes(false)
.OfType<SemverAttribute>()
.FirstOrDefault();
ViewBag.version = (attribute == null)
? string.Empty
: attribute.getversion;
这篇关于自定义程序集属性到字符串的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!