如何知道c#类是用户定义的类或c#程序集类

本文关键字:程序集 定义 何知道 用户 | 更新日期: 2023-09-27 18:20:51

我搜索过,但不知道如何检查一个类是用户定义的类还是c#.net程序集类。请在这一点上帮助我。当我使用汇编时,我需要知道哪些类是用户定义的,哪些不是?我还需要知道类属性的类型。

如何知道c#类是用户定义的类或c#程序集类

按F12尝试,然后签入类定义。也许这会有所帮助。

不太清楚你的意思,但如果你检查

yourObj.GetType().Assembly.Location

(或.CodeBase)您将得到提示。您需要将字符串与预期位置相匹配。

您也可以使用属性,例如:

var compAttr = yourObj.GetType().Assembly
    .GetCustomAttribute<AssemblyCompanyAttribute>();
var name = compAttr != null ? compAttr.Company : null;

需要CCD_ 2。(在较旧的版本(.NET 4及更早版本)中,反射的语法有点复杂。)

如果生成"用户定义"代码,则可以应用:

[assembly: MadeByMe]

到您的每个项目(需要编写public class MadeByMeAttribute : Attribute的地方)。然后搜索该属性,因为它肯定永远不会出现在BCL程序集中。

您可以选择检查程序集的公钥令牌,以检查它是否与Microsoft:的公钥令牌匹配

试试这个扩展方法:

public static bool IsMicrosoftAssembly(this Assembly assembly)
{
    return assembly.GetName().GetPublicKeyToken()
           .SequenceEqual(typeof(int).Assembly.GetName().GetPublicKeyToken());
}

这样使用:

var n = typeof(YourType).Assembly.IsMicrosoftAssembly();