【问题标题】:Deploying .NET satellite assemblies in specific folder在特定文件夹中部署 .NET 附属程序集
【发布时间】:2011-12-15 22:08:13
【问题描述】:

我正在开发一个 C# .NET 应用程序,并且正在使用资源文件执行本地化。 我有特定于文化的资源文件,例如:

  • MyResource.resx;
  • MyResource.fr-FR.resx;
  • MyResource.ja-JP.resx;

构建完成后,在应用根文件夹中有fr-FRja-JP等文件夹。

是否可以将所有本地化资源文件和文件夹移动到同一个文件夹中,例如Languages

更新 1:

我用下面的代码解决了这个问题。 似乎当我将应用程序复制到另一个地方时,它无法加载资源。正如我所看到的,application.config 文件也需要在那里。如果我将 app.config 作为嵌入资源,它就不起作用。

有没有办法,如何在同一目录下不需要 .config 文件的情况下做到这一点?

谢谢

【问题讨论】:

  • 是否是 libray 项目,例如dll?
  • 不,它是桌面应用程序。

标签: .net localization resources satellite-assembly


【解决方案1】:

默认情况下,附属程序集位于可执行文件正下方的子目录中。如果您想将所有fr-FRja-JP 和其他文化的剩余文件夹移动到同一文件夹Languages 中,可以通过在应用程序配置文件中添加以下条目来实现:

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <probing privatePath="Languages"/>
    </assemblyBinding>
  </runtime>
</configuration>

这表明在搜索程序集时,CLR 应该在默认位置以及probing 元素的privatePath 属性指定的一个或多个目录中进行搜索。您可以指定应用程序可执行文件下存在的任何目录。当指定多个子目录时,您需要用分号分隔每个子目录。

【讨论】:

    【解决方案2】:

    属性下的我的 ResX 文件如下:

    • Resources.resx
    • Resources.tr-TR.resx

    如上所述,我将运行时信息放入应用程序配置文件中,但没有更改。仍在可执行路径下创建 tr-TR 文件夹,而不是在 Languages 文件夹下。我在这里做错了什么?谢谢

    <configuration>
    ...
    <runtime>
    ...
    </runtime>
    </configuration>
    

    【讨论】:

    • 您需要自己移动文件夹(我是通过后期构建步骤完成的)。对配置设置的编辑只控制搜索额外程序集的方式,而不是它们的写入位置。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-02-23
    • 2012-07-15
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多