Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/314.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vue.js/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检索';装配公司';设置(在AssemblyInfo.cs中)?_C#_Assemblyinfo - Fatal编程技术网

C# 如何检索';装配公司';设置(在AssemblyInfo.cs中)?

C# 如何检索';装配公司';设置(在AssemblyInfo.cs中)?,c#,assemblyinfo,C#,Assemblyinfo,是否可以在运行时检索此值 我希望将值保留在一个位置,并在应用程序需要输出公司名称时检索它。这应该可以做到: using System.Reflection; string company = ((AssemblyCompanyAttribute)Attribute.GetCustomAttribute( Assembly.GetExecutingAssembly(), typeof(AssemblyCompanyAttribute), false)) .Company; 如果确

是否可以在运行时检索此值

我希望将值保留在一个位置,并在应用程序需要输出公司名称时检索它。

这应该可以做到:

using System.Reflection;

string company = ((AssemblyCompanyAttribute)Attribute.GetCustomAttribute(
    Assembly.GetExecutingAssembly(), typeof(AssemblyCompanyAttribute), false))
   .Company;
如果确实希望将值保留在一个位置,并且解决方案中有多个程序集,则可以:

  • 使用
    GetEntryAssembly
    而不是
    getExecutionGassembly
    并仅在条目程序集上设置company属性,或者更好:
  • 使用中央部件信息文件,请参见
更新
通过@hmemcpy的建议改进了代码,因此不再需要
[0]
。谢谢

如果您想要一种很好的获取程序集信息数据的通用方法,请尝试以下方法:

public string GetAssemblyAttribute<T>(Func<T, string> value)
    where T : Attribute
{
    T attribute = (T)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof (T));
    return value.Invoke(attribute);
}
公共字符串GetAssemblyAttribute(Func值)
其中T:Attribute
{
T attribute=(T)attribute.GetCustomAttribute(Assembly.getExecutionGassembly(),typeof(T));
返回值.Invoke(属性);
}
那你就可以打电话了

string title = GetAssemblyAttribute<AssemblyTitleAttribute>(a => a.Title);
string copyright = GetAssemblyAttribute<AssemblyCopyrightAttribute>(a => a.Copyright);
string version = GetAssemblyAttribute<AssemblyVersionAttribute>(a => a.Version);
string description = GetAssemblyAttribute<AssemblyDescriptionAttribute>(a => a.Description);
string title=GetAssemblyAttribute(a=>a.title);
string copyright=GetAssemblyAttribute(a=>a.copyright);
string version=GetAssemblyAttribute(a=>a.version);
string description=GetAssemblyAttribute(a=>a.description);

建立在亚当·普莱斯(Adam Price)非常优雅的方法之上——马克(Mark)对该方法不适用于版本的正确评论。。。提出了以下方法--一个用于获取当前正在执行的AssemblyInfo属性--另一个用于获取“调用”程序集的AssemblyInfo属性

把它放在我的博客上

//
///从AssemblyInfo.cs文件中获取当前正在执行的程序集的值
/// 
///         
///字符串company=AssemblyInfo.company;
///字符串product=AssemblyInfo.product;
///字符串版权=AssemblyInfo.copyright;
///字符串商标=AssemblyInfo.trademark;
///字符串标题=AssemblyInfo.title;
///字符串描述=AssemblyInfo.description;
///字符串配置=AssemblyInfo.configuration;
///字符串fileversion=AssemblyInfo.fileversion;
///版本版本=AssemblyInfo.Version;
///字符串versionFull=AssemblyInfo.versionFull;
///字符串versionMajor=AssemblyInfo.versionMajor;
///字符串versionMinor=AssemblyInfo.versionMinor;
///字符串versionBuild=AssemblyInfo.versionBuild;
///字符串versionRevision=AssemblyInfo.versionRevision;
/// 
静态公共类AssemblyInfo
{
公共静态字符串公司{get{return GetExecutionGassemblyAttribute(a=>a.Company);}
公共静态字符串乘积{get{return GetExecutionGassemblyAttribute(a=>a.Product);}
公共静态字符串版权{get{return GetExecutionGassemblyAttribute(a=>a.Copyright);}
公共静态字符串商标{get{return GetExecutionGassemblyAttribute(a=>a.Trademark);}
公共静态字符串标题{get{return GetExecutionGassemblyAttribute(a=>a.Title);}
公共静态字符串描述{get{return GetExecutionGassemblyAttribute(a=>a.Description);}
公共静态字符串配置{get{return GetExecutionGassemblyAttribute(a=>a.Description);}
公共静态字符串文件版本{get{return GetExecutionGassemblyAttribute(a=>a.Version);}
公共静态版本版本{get{return Assembly.GetExecutionGassembly().GetName().Version;}}
公共静态字符串VersionFull{get{return Version.ToString();}}
公共静态字符串VersionMajor{get{return Version.Major.ToString();}
公共静态字符串VersionMinor{get{返回Version.Minor.ToString();}
公共静态字符串VersionBuild{get{返回Version.Build.ToString();}
公共静态字符串VersionRevision{get{返回Version.Revision.ToString();}
私有静态字符串GetExecutionGassemblyAttribute(Func值),其中T:Attribute
{
T attribute=(T)attribute.GetCustomAttribute(Assembly.getExecutionGassembly(),typeof(T));
返回值.Invoke(属性);
}
}
/// 
///从AssemblyInfo.cs文件中获取上一个程序集的值
/// 
/// 
///AssemblyInfoCalling assembly=新建AssemblyInfoCalling();
///字符串company1=assembly.Company;
///字符串product1=assembly.Product;
///字符串版权1=程序集。版权;
///字符串trademark1=assembly.Trademark;
///字符串title1=assembly.Title;
///string description1=程序集。说明;
///字符串配置1=assembly.Configuration;
///字符串fileversion1=assembly.FileVersion;
///version1=程序集。版本;
///字符串versionFull1=assembly.VersionFull;
///字符串versionMajor1=assembly.VersionMajor;
///字符串versionMinor1=assembly.VersionMinor;
///字符串versionBuild1=assembly.VersionBuild;
///字符串versionRevision1=assembly.VersionRevision;
/// 
公共类调用
{
/// 
///初始化类的新实例。
/// 
///获取正确程序集所需的跟踪级别
///-需要根据您在项目中放置这些类的位置进行调整。
公共程序集信息调用(int-traceLevel=4)
{
//----------------------------------------------------------------------
//默认值为“3”,作为返回堆栈跟踪以获取
//“调用”程序集的正确程序集
//----------------------------------------------------------------------
StackTraceLevel=traceLevel;
}
//----------------------------------------------------------------------
//标准程序集属性
//----------------------------------------------------------------------
公共字符串公司{get{return GetCallingAssemblyAttribute(a=>a.Company);}
公共字符串产品{get{return GetCallingAssemblyAttribute(a=>a.Product);}
公共字符串版权{get{return GetCallingAssemblyAttribute(a=>a
/// <summary>
/// Gets the values from the AssemblyInfo.cs file for the current executing assembly
/// </summary>
/// <example>        
/// string company = AssemblyInfo.Company;
/// string product = AssemblyInfo.Product;
/// string copyright = AssemblyInfo.Copyright;
/// string trademark = AssemblyInfo.Trademark;
/// string title = AssemblyInfo.Title;
/// string description = AssemblyInfo.Description;
/// string configuration = AssemblyInfo.Configuration;
/// string fileversion = AssemblyInfo.FileVersion;
/// Version version = AssemblyInfo.Version;
/// string versionFull = AssemblyInfo.VersionFull;
/// string versionMajor = AssemblyInfo.VersionMajor;
/// string versionMinor = AssemblyInfo.VersionMinor;
/// string versionBuild = AssemblyInfo.VersionBuild;
/// string versionRevision = AssemblyInfo.VersionRevision;
/// </example>
static public class AssemblyInfo
{
    public static string Company { get { return GetExecutingAssemblyAttribute<AssemblyCompanyAttribute>(a => a.Company); } }
    public static string Product { get { return GetExecutingAssemblyAttribute<AssemblyProductAttribute>(a => a.Product); } }
    public static string Copyright { get { return GetExecutingAssemblyAttribute<AssemblyCopyrightAttribute>(a => a.Copyright); } }
    public static string Trademark { get { return GetExecutingAssemblyAttribute<AssemblyTrademarkAttribute>(a => a.Trademark); } }
    public static string Title { get { return GetExecutingAssemblyAttribute<AssemblyTitleAttribute>(a => a.Title); } }
    public static string Description { get { return GetExecutingAssemblyAttribute<AssemblyDescriptionAttribute>(a => a.Description); } }
    public static string Configuration { get { return GetExecutingAssemblyAttribute<AssemblyDescriptionAttribute>(a => a.Description); } }
    public static string FileVersion { get { return GetExecutingAssemblyAttribute<AssemblyFileVersionAttribute>(a => a.Version); } }

    public static Version Version { get { return Assembly.GetExecutingAssembly().GetName().Version; } }
    public static string VersionFull { get { return Version.ToString(); } }
    public static string VersionMajor { get { return Version.Major.ToString(); } }
    public static string VersionMinor { get { return Version.Minor.ToString(); } }
    public static string VersionBuild { get { return Version.Build.ToString(); } }
    public static string VersionRevision { get { return Version.Revision.ToString(); } }

    private static string GetExecutingAssemblyAttribute<T>(Func<T, string> value) where T : Attribute
    {
        T attribute = (T)Attribute.GetCustomAttribute(Assembly.GetExecutingAssembly(), typeof(T));
        return value.Invoke(attribute);
    }
}


/// <summary>
/// Gets the values from the AssemblyInfo.cs file for the previous assembly
/// </summary>
/// <example>
/// AssemblyInfoCalling assembly = new AssemblyInfoCalling();
/// string company1 = assembly.Company;
/// string product1 = assembly.Product;
/// string copyright1 = assembly.Copyright;
/// string trademark1 = assembly.Trademark;
/// string title1 = assembly.Title;
/// string description1 = assembly.Description;
/// string configuration1 = assembly.Configuration;
/// string fileversion1 = assembly.FileVersion;
/// Version version1 = assembly.Version;
/// string versionFull1 = assembly.VersionFull;
/// string versionMajor1 = assembly.VersionMajor;
/// string versionMinor1 = assembly.VersionMinor;
/// string versionBuild1 = assembly.VersionBuild;
/// string versionRevision1 = assembly.VersionRevision;
/// </example>
public class AssemblyInfoCalling
{
    /// <summary>
    /// Initializes a new instance of the <see cref="AssemblyInfoCalling"/> class.
    /// </summary>
    /// <param name="traceLevel">The trace level needed to get correct assembly 
    /// - will need to adjust based on where you put these classes in your project(s).</param>
    public AssemblyInfoCalling(int traceLevel = 4)
    {
        //----------------------------------------------------------------------
        // Default to "3" as the number of levels back in the stack trace to get the 
        //  correct assembly for "calling" assembly
        //----------------------------------------------------------------------
        StackTraceLevel = traceLevel;
    }

    //----------------------------------------------------------------------
    // Standard assembly attributes
    //----------------------------------------------------------------------
    public string Company { get { return GetCallingAssemblyAttribute<AssemblyCompanyAttribute>(a => a.Company); } }
    public string Product { get { return GetCallingAssemblyAttribute<AssemblyProductAttribute>(a => a.Product); } }
    public string Copyright { get { return GetCallingAssemblyAttribute<AssemblyCopyrightAttribute>(a => a.Copyright); } }
    public string Trademark { get { return GetCallingAssemblyAttribute<AssemblyTrademarkAttribute>(a => a.Trademark); } }
    public string Title { get { return GetCallingAssemblyAttribute<AssemblyTitleAttribute>(a => a.Title); } }
    public string Description { get { return GetCallingAssemblyAttribute<AssemblyDescriptionAttribute>(a => a.Description); } }
    public string Configuration { get { return GetCallingAssemblyAttribute<AssemblyDescriptionAttribute>(a => a.Description); } }
    public string FileVersion { get { return GetCallingAssemblyAttribute<AssemblyFileVersionAttribute>(a => a.Version); } }

    //----------------------------------------------------------------------
    // Version attributes
    //----------------------------------------------------------------------
    public static Version Version
    {
        get
        {
            //----------------------------------------------------------------------
            // Get the assembly, return empty if null
            //----------------------------------------------------------------------
            Assembly assembly = GetAssembly(StackTraceLevel);
            return assembly == null ? new Version() : assembly.GetName().Version;
        }
    }
    public string VersionFull { get { return Version.ToString(); } }
    public string VersionMajor { get { return Version.Major.ToString(); } }
    public string VersionMinor { get { return Version.Minor.ToString(); } }
    public string VersionBuild { get { return Version.Build.ToString(); } }
    public string VersionRevision { get { return Version.Revision.ToString(); } }

    //----------------------------------------------------------------------
    // Set how deep in the stack trace we're looking - allows for customized changes
    //----------------------------------------------------------------------
    public static int StackTraceLevel { get; set; }

    /// <summary>
    /// Gets the calling assembly attribute.
    /// </summary>
    /// <typeparam name="T"></typeparam>
    /// <param name="value">The value.</param>
    /// <example>return GetCallingAssemblyAttribute&lt;AssemblyCompanyAttribute&gt;(a => a.Company);</example>
    /// <returns></returns>
    private string GetCallingAssemblyAttribute<T>(Func<T, string> value) where T : Attribute
    {
        //----------------------------------------------------------------------
        // Get the assembly, return empty if null
        //----------------------------------------------------------------------
        Assembly assembly = GetAssembly(StackTraceLevel);
        if (assembly == null) return string.Empty;

        //----------------------------------------------------------------------
        // Get the attribute value
        //----------------------------------------------------------------------
        T attribute = (T) Attribute.GetCustomAttribute(assembly, typeof (T));
        return value.Invoke(attribute);
    }

    /// <summary>
    /// Go through the stack and gets the assembly
    /// </summary>
    /// <param name="stackTraceLevel">The stack trace level.</param>
    /// <returns></returns>
    private static Assembly GetAssembly(int stackTraceLevel)
    {
        //----------------------------------------------------------------------
        // Get the stack frame, returning null if none
        //----------------------------------------------------------------------
        StackTrace stackTrace = new StackTrace();
        StackFrame[] stackFrames = stackTrace.GetFrames();
        if (stackFrames == null) return null;

        //----------------------------------------------------------------------
        // Get the declaring type from the associated stack frame, returning null if nonw
        //----------------------------------------------------------------------
        var declaringType = stackFrames[stackTraceLevel].GetMethod().DeclaringType;
        if (declaringType == null) return null;

        //----------------------------------------------------------------------
        // Return the assembly
        //----------------------------------------------------------------------
        var assembly = declaringType.Assembly;
        return assembly;
    }
}