Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/307.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 自定义resx框架VisualStudio2010_C#_Xml_Visual Studio 2010_Resx - Fatal编程技术网

C# 自定义resx框架VisualStudio2010

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模板添加

我喜欢VisualStudio2010Resx框架,我希望有相同的功能,但有自定义列。我考虑了以下解决方案:

  • 将res.xml定义为生成类资源的唯一文件
  • 创建我自己的visual studio加载项,在每次保存我的res.xml时使用xml中的字段生成resources类 例如:

    Xml:

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


    编辑:修复了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#>);
    <#      }#>
        }
    }