在特定文件夹部署.NET卫星程序集

8
我正在开发一款C# .NET应用程序,并使用资源文件进行本地化。我有特定于区域设置的资源文件,例如:
  • MyResource.resx;
  • MyResource.fr-FR.resx;
  • MyResource.ja-JP.resx;
在构建后,在应用程序根目录下会生成类似 fr-FRja-JP 等文件夹。
是否可以将所有本地化资源文件和文件夹移动到同一个文件夹中,例如 Languages
更新1:
我通过以下代码解决了这个问题。似乎当我将应用程序复制到另一个位置时,它无法加载资源。正如我所看到的,应用程序配置文件也需要在那里。如果将 app.config 设为嵌入资源,则不起作用。
有没有办法在不需要相同目录下的 .config 文件的情况下完成此操作?
谢谢。

这是一个库项目吗,例如dll? - Remy
不,这是桌面应用程序。 - KristijanSharp
2个回答

11

默认情况下,卫星程序集会被放置在可执行文件的直接子目录中。如果你想将所有的fr-FRja-JP和其他文化的文件夹移动到同一个名为Languages的文件夹中,可以通过向应用程序配置文件添加以下条目来实现:

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

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


对我来说不起作用:在build/release/目录下有22个语言文件夹(加上lib文件夹)。 即使在按F6构建解决方案之前,build/release/目录为空。 这是绝对不必要的。(只需要1种语言) - Flo Bayer

1

我的 Properties 下的 ResX 文件如下:

  • Resources.resx
  • Resources.tr-TR.resx
我按照上述所述的将运行时信息放入应用程序配置文件中,但没有变化。仍然在可执行路径下创建了一个tr-TR文件夹,而不是Languages文件夹下。可能我在这里做错了什么?谢谢
<configuration>
...
<runtime>
...
</runtime>
</configuration>

你需要自己移动文件夹(我是通过后构建步骤完成的)。对配置设置的编辑仅控制额外程序集的搜索方式,而不是它们被写入的位置。 - Seanba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接