【问题标题】:ResXFileCodeGenerator - overriding the output (want to use a Custom ResourceManager)ResXFileCodeGenerator - 覆盖输出(想要使用自定义资源管理器)
【发布时间】:2016-03-14 12:38:16
【问题描述】:

我创建了一个继承自 ResourceManager 的类。我的问题是,如果我更改 Resources.Designer.cs 以使用它,

例如

private static global::System.Resources.ResourceManager _resourceManager;

private static global::MyProject.Resources.MyResourceManager _resourceManager;

它被 ResXFileCodeGenerator 覆盖并设置回默认的System.Resources.ResourceManager

我不想关闭 ResXFileCodeGenerator。但是有没有办法告诉它使用哪个ResourceManager 类?

我被告知要查看 ResXFileCodeGeneratorEx,但在这方面看不出有什么不同。

【问题讨论】:

    标签: c# visual-studio resx


    【解决方案1】:

    有点晚了,但使用反射可以解决这个问题。我把这段代码放在 Startup.cs 文件中。

    var innerField = typeof(Resources.Resources).GetField("resourceMan",
        BindingFlags.NonPublic | BindingFlags.Static);
    
    if (innerField != null)
    {
        innerField.SetValue(null,
            new ExtendedResourceManager("MyNamespace.ResourceFileWithoutResx",
                typeof(Resources.Resources).Assembly));
    }
    

    因为设计器生成的文件是有目共睹的,只需根据 ResourceManager { get; 修改我编写的代码即可。 } 为您生成的代码。

    您可以创建自己的 ExtendedResourceManager 类并根据需要覆盖所有属性。

    编码愉快。

    【讨论】:

      【解决方案2】:

      我设法使用 T4 实现了这一目标

      https://msdn.microsoft.com/en-us/library/bb126445.aspx

      基本上允许以 ResXFileCodeGenerator 的方式自动生成代码。

      这不是一个完美的解决方案,因为它只是复制 ResXFileCodeGenerator 的功能需要做很多工作,而且它不会在每次保存 .resx 文件时自动运行,而无需安装另一个 Visual Studio 自定义工具,我必须付出才能让项目中的所有开发人员都安装。

      【讨论】:

        【解决方案3】:

        @James Woodall:我不得不稍微修改一下你的代码,让它与正确的语言文件一起工作:

        var innerField = typeof(Resources.Resources).GetField("resourceMan",
        BindingFlags.NonPublic | BindingFlags.Static);
        
        innerField.SetValue(null,
            new ExtendedResourceManager("MyNamespace.ResourceFileWithoutResx",
                typeof(Resources.Resources).Assembly));
        
        innerField = typeof(Resources.Resources).GetField("resourceCulture",
        BindingFlags.NonPublic | BindingFlags.Static);
        
        innerField.SetValue(null, CultureInfo.CurrentUICulture); 
        

        感谢您的解决方案,这是一个比公认的答案更好的解决方案,它有太多缺点。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-03-24
          • 2023-03-22
          • 1970-01-01
          • 1970-01-01
          • 2020-04-18
          相关资源
          最近更新 更多