gpt4 book ai didi

c# - 如何在 T4 模板中使用 resx 资源文件

转载 作者:行者123 更新时间:2023-11-30 15:00:02 27 4
gpt4 key购买 nike

我不知道如何在 (.tt) T4 模板中包含资源文件 (.resx)。

到目前为止我试过了...导入命名空间

<#@ import namespace="T4TemplateResources.resx" #>

还包括类

最佳答案

Nico 的解决方案需要您的解决方案来构建。

还有另一种方法,无需通过读取原始 resx 文件来编译您的解决方案。

    var fileName = "CustomResource.resx";
var filePath = Path.Combine(Path.GetDirectoryName(this.Host.ResolvePath("")), "WindowsFormsApplication1", fileName);
var reader = new ResXResourceReader(filePath);
var values = reader.Cast<DictionaryEntry>().ToDictionary(x => x.Key, y => y.Value);

// this is how you would acces the resources
var value = values["entry"];

您应该知道,此方法缺少设计时检查资源是否不存在,并且您没有获得本地化值,因为您只是在读取文件。对于 T4 模板,两者通常都不是强制性的

这是一个从资源文件创建枚举的工作片段。

只需确保为 fileNamefilePath 设置正确的值即可

<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ output extension=".cs" #>
<#@ assembly name="System.Windows.Forms" #>

<#@ import namespace="System.Resources" #>
<#@ import namespace="System.Collections" #>
<#@ import namespace="System.IO" #>
<#@ import namespace="System.ComponentModel.Design" #>

<#

var nameSpace = "WindowsFormsApplication1";
var enumName = "CustomEnum";

var fileName = "CustomResource.resx";
var filePath = Path.Combine(Path.GetDirectoryName(this.Host.ResolvePath("")), "WindowsFormsApplication10", fileName);

using (var reader = new ResXResourceReader(filePath))
{

reader.UseResXDataNodes = true;
#>

namespace <#=nameSpace#>
{

public enum <#=enumName#>
{

Undefined,

<# foreach(DictionaryEntry entry in reader) {

var name = entry.Key;
var node = (ResXDataNode)entry.Value;
var value = node.GetValue((ITypeResolutionService) null);
var comment = node.Comment;
var summary = value;
if (!String.IsNullOrEmpty(comment)) summary += " - " + comment;
#>

/// <summary>
/// <#= summary #>
/// </summary>
<#= name #>,

<# } #>

}

}


<#
}
#>

关于c# - 如何在 T4 模板中使用 resx 资源文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15885354/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com