【问题标题】:"Run Custom Tool" for resx files in MVC2 project (from an external application/script)MVC2 项目中 resx 文件的“运行自定义工具”(来自外部应用程序/脚本)
【发布时间】:2010-07-12 17:14:59
【问题描述】:

我正在尝试使用我们现有的基础架构来为我的 MVC 项目进行本地化,以编辑字符串资源。我们将所有资源字符串存储在数据库表中,并有一个用于编辑它们的前端 Web UI,以及一个生成 .resx 文件的导出应用程序。这一切都很好,但我在使用 MVC2 和 VS2010 的新项目时遇到了一点困难。

我已经问过another question 这个问题,答案几乎让我明白了,但并不完全。

我现在已按照许多人的建议将资源更改为位于 Resources 文件夹(而不是 App_GlobalResources)中。并对我的 .resx 文件进行以下设置...

构建操作 = 嵌入式资源 复制到输出目录 = 不复制 自定义工具 = PublicResXFileCodeGenerator 自定义工具命名空间 = 资源 文件名 = MyApp.resx

我已更改我的导出应用程序以使用以下参数运行resgen.exe 工具...

string args = string.Format("/publicClass \"{0}\" /str:cs,Resources,{1},\"{2}\"", resourceFile, Path.GetFileNameWithoutExtension(resourceFile), csFilename);

...它会生成一个几乎与我最初将 .resx 文件添加到我的项目中时得到的相同的 .designer.cs 文件。唯一的区别是

生成的 .designer.cs 文件与我在导出应用程序中运行 resgen.exe 工具时得到的文件略有不同。

这是我第一次将 .resx 文件添加到我的 Resources 文件夹时 VS2010 生成的代码...

public static global::System.Resources.ResourceManager ResourceManager {
    get {
        if (object.ReferenceEquals(resourceMan, null)) {
            global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("Resources.MyApp", typeof(MyApp).Assembly);
            resourceMan = temp;
        }
        return resourceMan;
    }
}

...当我运行 resgen.exe 工具时的不同之处在于,将 MyCompany.MyApp 前缀到 ResourceManager 的构造函数中的命名空间

new global::System.Resources.ResourceManager("MyCompany.MyApp.Resources.MyApp", typeof(MyApp).Assembly);

现在,在我看来,这似乎是 resgen.exe 工具中的一个错误,因为我告诉它我的资源的命名空间是 Resources,而不是 MyCompany.MyApp。资源

那么,是否有解决此问题的方法/解决方法?

目前我唯一能想到的就是用powershell对生成的.designer.cs文件进行后期处理并修复!

【问题讨论】:

    标签: visual-studio-2010 asp.net-mvc-2 resx


    【解决方案1】:

    我终于解决了这个问题。

    我决定通过将我的资源分解为一个名为 Resources 的新程序集来简化一些事情。然后我添加了我的 resx 文件并为它们设置了如下属性...

    构建操作 = 嵌入式资源 复制到输出目录 = 不复制 自定义工具 = PublicResXFileCodeGenerator 自定义工具命名空间 = 资源 文件名 = MyApp.resx

    然后我将导出应用程序更改为运行...

    resgen MyApp.resx /str:c#,Resources,MyApp,MyApp.designer.cs /publicClass

    ...并从文件夹中删除 *.resources(由 resgen.exe 实用程序创建,但不需要)

    这去掉了构造函数上对 ResourceManager 的前缀,然后我只是向我的 Web 应用程序添加了对我的新 Resources 程序集的引用。

    我已经运行了一些测试以确保一切正常,包括进入 .designer.cs 文件并删除其中一个属性以导致编译器错误。然后重新运行我的导出应用程序,一切都恢复正常了。

    所以,我是一只快乐的兔子!

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-09-23
      • 1970-01-01
      • 1970-01-01
      • 2016-05-30
      相关资源
      最近更新 更多