C# 自定义resx框架VisualStudio2010
我喜欢VisualStudio2010Resx框架,我希望有相同的功能,但有自定义列。我考虑了以下解决方案:C# 自定义resx框架VisualStudio2010,c#,xml,visual-studio-2010,resx,C#,Xml,Visual Studio 2010,Resx,我喜欢VisualStudio2010Resx框架,我希望有相同的功能,但有自定义列。我考虑了以下解决方案: 将res.xml定义为生成类资源的唯一文件 创建我自己的visual studio加载项,在每次保存我的res.xml时使用xml中的字段生成resources类 例如: Xml: 问题是我在这里杀戮过度了吗? 有没有更简单的方法来实现我的目标 编辑:修复了xml。一个简单的T4模板就足够了,T4已经内置在MSV中。将XML添加到项目中(确保它有效,当前XML示例无效),并将T4模板添加
编辑:修复了xml。一个简单的T4模板就足够了,T4已经内置在MSV中。将XML添加到项目中(确保它有效,当前XML示例无效),并将T4模板添加到与XML文件相同的项目目录中。根据需要编辑名称空间名称和XML文件名(示例代码使用“T4Example”作为名称空间,使用“Example.XML”作为输入文件名)
名称空间示例
{
类字段
{
Tuple.Create(
i、 属性(“名称”)。值,
i、 属性(“loggerLevel”).Value);
foreach(数据中的变量元组)
{#>
公共只读字段=新字段(LoggerLevel.);
}
}
谢谢你,Max,我正在尝试使用你的示例,但该文件没有生成生成的触发器是什么?每次修改和保存模板文件时都应生成该触发器。任何错误都应立即显示在错误列表窗口中。首先尝试使T4模板的最简单示例生效().niceee!!它正在工作:)请再问一个问题。是否有任何方法可以在每次更改xml(不是模板文件)时触发生成?是的,但需要实现自定义生成工具。请参阅相关问题:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<field name="x" loggerLevel="Verbose"/>
<field name="y" loggerLevel="Details"/>
</resources>
class Resources{
public readonly Field x = new Field(LoggerLevel.Verbose);
public readonly Field y = new Field(LoggerLevel.Details);
}
<#@ template debug="false" hostspecific="true" language="C#" #>
<#@ assembly name="System.Core.dll" #>
<#@ assembly name="System.Xml.dll" #>
<#@ assembly name="System.Xml.Linq.dll" #>
<#@ import namespace="System.Xml" #>
<#@ import namespace="System.Xml.Linq" #>
<#@ import namespace="System.Linq" #>
<#@ import namespace="System.IO" #>
<#@ output extension=".cs" #>
namespace T4Example
{
class Fields
{
<#
string stringsDir = Path.GetDirectoryName(this.Host.TemplateFile);
string reswFile = Path.Combine(stringsDir, @"Example.xml");
var doc = XDocument.Load(reswFile);
var data = doc.Element("xml")
.Element("fields")
.Elements("field")
.Select(i => Tuple.Create(
i.Attribute("name").Value,
i.Attribute("loggerLevel").Value));
foreach(var tuple in data)
{#>
public readonly Field <#=tuple.Item1#> = new Field(LoggerLevel.<#=tuple.Item2#>);
<# }#>
}
}