我正在编写一个源生成器,但正在努力获取传递给我的属性的构造函数的参数值。
我将以下内容注入编译:
namespace Richiban.Cmdr
{
[AttributeUsage(AttributeTargets.Method, AllowMultiple = false)]
public class CmdrMethod : System.Attribute
{
private readonly string _alias;
public CmdrMethod(string alias)
{
_alias = alias;
}
}
}
然后在我的示例应用程序中,我有以下内容:
public static class InnerContainerClass
{
[CmdrMethod("test")]
public static void AnotherMethod(Data data)
{
Console.WriteLine($"In {nameof(AnotherMethod)}, {new { data }}");
}
}
这编译时没有错误或警告,我成功地找到了所有用我的CmdrMethod
属性修饰的方法,但我无法获取传递给属性的值,因为由于某种原因,ConstructorArguments
属性的属性为空:
private static ImmutableArray<string> GetAttributeArguments(
IMethodSymbol methodSymbol,
string attributeName)
{
var attr = methodSymbol
.GetAttributes()
.Single(a => a.AttributeClass?.Name == attributeName);
var arguments = attr.ConstructorArguments;
if (methodSymbol.Name == "AnotherMethod")
Debugger.Launch();
return arguments.Select(a => a.ToString()).ToImmutableArray();
}
我误解了这个 API 吗?我究竟做错了什么?