c# - 自定义 resx 框架 Visual Studio 2010

标签 c# xml visual-studio-2010 resx

我喜欢 Visual Studio 2010 resx 框架,我希望具有相同的功能,但具有自定义列。我想到了以下解决方案:

  1. 将 res.xml 定义为用于生成资源类的唯一文件。
  2. 创建我自己的 Visual Studio 插件,每次保存 res.xml 时都会使用 xml 中的字段生成资源类。

示例:

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);
}

问题是我在这里杀戮过度了吗? 有没有更简单的解决方案来实现我的目标?

编辑:修复了 xml。

最佳答案

一个简单的 T4 模板可能就足够了,并且 T4 已经内置在 MSVS 中。将您的 XML 添加到项目中(确保它有效,您当前的 XML 示例无效),并将 T4 模板添加到与您的 XML 文件相同的项目目录中。根据需要编辑命名空间名称和 XML 文件名(示例代码使用“T4Example”作为命名空间,使用“Example.xml”作为输入文件名)。

<#@ 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#>);
<#      }#>
    }
}

关于c# - 自定义 resx 框架 Visual Studio 2010,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12882571/

相关文章:

javascript - Visual Studio 2010 使用 IE 调试 Javascript 有效,但不适用于 firefox 或 chrome。任何解决方案?

c# - ASP.Net MVC 中模型启动的数据绑定(bind)(更新 UI)

C# 资源数组

c# - 使用内部连接从 Dapper 获取数据

visual-studio-2010 - MVC3起始页

c++ - 修复 C++ 中的宏重新定义

c# - WCF 客户端证书验证 + Windows 身份验证

python - BeautifulSoup 能否保留 CDATA 部分?

xml - 如何在 XSD 中为数据库表建模?

java - 在Java中同步两个DOM树