提问人:theGhostN 提问时间:1/29/2023 最后编辑:theGhostN 更新时间:1/31/2023 访问量:79
不能在 T4 模板中使用 DisplayAttribute
Can not use DisplayAttribute in T4 template
问:
在我的自定义 T4 模板中,我必须阅读 .但是在为几种解决方案而苦苦挣扎之后,我不断遇到不同的错误。
这是我文件的一部分:DisplayAttribute
type
.tt
<#@ template debug="true" hostspecific="true" language="C#" compilerOptions="/langversion:10" #>
<#@ assembly name="System" #>
<#@ assembly name="System.Runtime" #>
<#@ assembly name="System.Core" #>
<#@ assembly name="System.ComponentModel.Annotations" #>
<#@ import namespace="System" #>
<#@ import namespace="System.Reflection" #>
<#@ import namespace="System.Runtime" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.Text" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.ComponentModel.DataAnnotations" #>
<#@ output extension=".cs" #>
<#
static string GetEnumValueDisplayName(Enum value)
{
Type type = value.GetType();
MemberInfo[] memInfo = type.GetMember(value.ToString());
DisplayAttribute? dispalyAttribute = null;
if (memInfo != null && memInfo.Length > 0)
{
object[] attrs = memInfo[0].GetCustomAttributes(typeof(DisplayAttribute), false);
if (attrs != null && attrs.Length > 0)
dispalyAttribute = attrs[0] as DisplayAttribute;
}
return dispalyAttribute?.Name ?? "";
}
#>
<#
foreach(myEnum en in Enum.GetValues(typeof(MyEnum)))
{#>
public static class <#[email protected]()#> { public const string Value = "<#[email protected]()#>";public const string Text = "<#=@GetEnumValueDisplayName(en)#>";}
<#}#>
这是我的编译时错误:
编译转换:类型名称“DisplayAttribute”无法 在命名空间“System.ComponentModel.DataAnnotations”中找到。 此类型已转发到程序集 'System.ComponentModel.DataAnnotations,版本 = 4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35' 考虑添加一个 对该程序集的引用。
我正在将 .net 6 与 Visual Studio 2022(17.0.4) 一起使用。
答:
0赞
Karen Payne
1/30/2023
#1
删除并添加到常规 using 语句中。<#@ assembly name="System.ComponentModel.Annotations" #>
using System.ComponentModel.DataAnnotations;
评论
0赞
theGhostN
1/30/2023
这不是答案。我更新了代码以使其更准确。我想将 DisplayNameAttribute 用作生成代码的一部分,而不是作为生成代码的一部分。
0赞
mgoertz-MSFT
1/31/2023
#2
我正在使用 .net 6
那将是一个问题。VS T4 引擎目前仅支持 .NET Framework,这意味着它在转换期间无法加载任何 .NET Core 库。我们已开始开发该引擎的 .NET Core 版本,但尚未确定何时可用。任何更新都将通过此建议票进行传达。
评论