11

在对象中使用的通用属性上是否有一个列表Serializable

谢谢

编辑~我问的原因是我在 ntiers ORMS 中遇到了一个 StoredProcedure 属性。

4

5 回答 5

12

是的,看看 msdn 是否涵盖了请看这里

编辑:这个链接只回答很烂。这是名称中包含 Attribute 的所有可加载类型 (gac) 的有效提取器。

using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Reflection;

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            var process = new Process();
            //your path may vary
            process.StartInfo.FileName = @"C:\Program Files (x86)\Microsoft SDKs\Windows\v10.0A\bin\NETFX 4.6.1 Tools\gacutil.exe";
            process.StartInfo.RedirectStandardOutput = true;
            process.StartInfo.UseShellExecute = false;
            process.StartInfo.Arguments = "/l";
            process.Start();

            var consoleOutput = process.StandardOutput;


            var assemblyList = new List<string>();
            var startAdding = false;
            while (consoleOutput.EndOfStream == false)
            {
                var line = consoleOutput.ReadLine();
                if (line.IndexOf("The Global Assembly Cache contains the following assemblies", StringComparison.OrdinalIgnoreCase) >= 0)
                {
                    startAdding = true;
                    continue;
                }

                if (startAdding == false)
                {
                    continue;
                }

                //add any other filter conditions (framework version, etc)
                if (line.IndexOf("System.", StringComparison.OrdinalIgnoreCase) < 0)
                {
                    continue;
                }

                assemblyList.Add(line.Trim());
            }

            var collectedRecords = new List<string>();
            var failedToLoad = new List<string>();

            Console.WriteLine($"Found {assemblyList.Count} assemblies");
            var currentItem = 1;


            foreach (var gacAssemblyInfo in assemblyList)
            {
                Console.SetCursorPosition(0, 2);
                Console.WriteLine($"On {currentItem} of {assemblyList.Count} ");
                Console.SetCursorPosition(0, 3);
                Console.WriteLine($"Loading {gacAssemblyInfo}");
                currentItem++;

                try
                {
                    var asm = Assembly.Load(gacAssemblyInfo);

                    foreach (Type t in asm.GetTypes())
                    {
                        if (t.Name.EndsWith("Attribute", StringComparison.OrdinalIgnoreCase))
                        {
                            collectedRecords.Add($"{t.FullName} - {t.Assembly.FullName}");
                        }
                    }

                }
                catch (Exception ex)
                {
                    failedToLoad.Add($"FAILED to load {gacAssemblyInfo} - {ex}");
                    Console.SetCursorPosition(1, 9);
                    Console.WriteLine($"Failure to load count: {failedToLoad.Count}");
                    Console.SetCursorPosition(4, 10);
                    Console.WriteLine($"Last Fail: {gacAssemblyInfo}");
                }
            }

            var fileBase = System.IO.Path.GetRandomFileName();
            var goodFile = $"{fileBase}_good.txt";
            var failFile = $"{fileBase}_failedToLoad.txt";
            System.IO.File.WriteAllLines(goodFile, collectedRecords);
            System.IO.File.WriteAllLines(failFile, failedToLoad);
            Console.SetCursorPosition(0, 15);
            Console.WriteLine($"Matching types: {goodFile}");
            Console.WriteLine($"Failures: {failFile}");
            Console.WriteLine("Press ENTER to exit");
            Console.ReadLine();
        }
    }
}
于 2008-10-07T17:22:30.187 回答
3

此外,您可以创建自己的属性。如果您正在搜索其他人的代码,当他们创建自己的代码时很容易感到困惑。

于 2008-10-07T17:40:58.463 回答
2

我不知道属性的完整列表,但是在 MSDN 中搜索属性可以产生有趣的结果。我倾向于浏览命名空间以查找有趣的属性类型,然后查找它们以了解我可能将它们用于什么。我知道,这不是最有效的方法。

System.Attribute的 MSDN 条目底部有一个列表。

于 2008-10-07T17:25:02.647 回答
1

您可能找不到您要查找的内容,因为您可能正在查看自定义属性。

http://www.code-magazine.com/Article.aspx?quickid=0307041

于 2008-10-07T17:40:16.983 回答
1

您可以使用 Reflector 浏览mscorlib程序集,然后在 下System.Attribute展开Derived Types节点。它将显示当前在 Reflector 中加载的所有程序集的所有属性。

于 2008-10-07T17:51:15.887 回答