【问题标题】:Change i18n resources path for .Net Windows application更改 .Net Windows 应用程序的 i18n 资源路径
【发布时间】:2010-06-17 20:12:42
【问题描述】:

我们正在将一个 .Net windows 应用程序迁移到 Windows 7。此应用程序可用于多种语言,但默认情况下仅安装英语。有一个菜单项允许用户下载其他语言。
此应用程序使用标准的 .Net 卫星资源文件夹组织:http://msdn.microsoft.com/en-us/library/sb6a8618%28v=VS.80%29.aspx
Windows 7 中的问题是用户不是管理员,并且没有对安装应用程序的“程序文件”文件夹的写入权限。这意味着当用户尝试下载新的语言资源文件时,他们会遇到错误。
有没有办法指示.Net 在另一个文件夹中查找资源文件,例如用户主目录中的一个? 我知道您可以将资源添加到 .Net 全局程序集缓存,但您还需要管理员权限。

编辑:我知道 配置参数 (http://msdn.microsoft.com/en-us/library/823z9h8w.aspx),但它只能用于指定应用程序基本路径的子目录。有没有办法将它强制放到应用程序主目录之外的文件夹中?

编辑:我想我可能会使用 AppDomain.AssemblyResolve 事件来查找适当的资源,但在 .Net 4 之前不会为资源程序集调用它,我也不能让用户更新到该版本。

谢谢,
吉列尔莫

【问题讨论】:

    标签: .net winforms internationalization


    【解决方案1】:

    VB.Net 有一个SpecialDirectories 类,可用于访问当前用户应用程序数据目录等目录(通过CurrentUserApplicationData 成员)。

    您可以在没有管理员权限的情况下写入此目录,但我会确保在其中为您的应用程序创建一个唯一的目录结构。

    【讨论】:

    • 是的,我写入用户目录没有问题。我正在寻找的是一种控制 .Net 探测其他语言资源文件的方法。
    • @Guillermo - 抱歉,我不知道有什么方法可以避免应用程序路径或 gac :(
    【解决方案2】:

    我终于成功地创建了一个从应用程序文件夹下的子目录(用户)到用户文件夹中的目录的连接文件夹链接。然后我在 app.config 中的 assemblyBinding 标签下添加了以下行:

    <probing privatePath=".;user" />
    

    应用程序将资源文件写入用户的文件夹中,应用程序可以访问它们,就好像它们位于正确的路径中一样。
    这不是最优雅的解决方案,但它确实有效。

    【讨论】:

      猜你喜欢
      • 2015-08-29
      • 2022-11-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-08-08
      • 1970-01-01
      • 2011-04-24
      • 1970-01-01
      相关资源
      最近更新 更多