1

我的 C#/WF 应用程序使用了一些文件,这些文件因不同的语言而异。这些文件不能作为资源放置在附属程序集中。但是,我希望将它们放在与附属程序集相同的目录中,但我需要知道程序集的实际位置(包括使用嵌入在二进制文件中的默认语言时的情况)。

例如,当应用程序自动切换到波兰语时,我希望检索位置:

D:\<应用程序文件夹>\pl-PL\

有没有办法这样做?请注意,我希望从程序集中检索此信息,而不是通过猜测文件夹位置。


在史蒂夫 B 的帮助下,这里有一个解决方案:

string FindSatelliteAssemblyLocation(CultureInfo culture)
{
    if (culture == CultureInfo.InvariantCulture)
        return Path.GetDirectoryName(Application.ExecutablePath);

    try
    {
        Uri location = new Uri(Assembly.GetExecutingAssembly().GetSatelliteAssembly(culture).CodeBase);
        return Path.GetDirectoryName(location.LocalPath);
    }
    catch
    {
        return FindSatelliteAssemblyLocation(culture.Parent);
    }
}
4

2 回答 2

1

您可以使用当前线程 UI 文化来获取语言:

var subfolder = System.Threading.Thread.CurrentUICulture.Name;
于 2012-11-06T16:52:41.537 回答
-1

我觉得你可以使用System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)和的组合CultureInfo.CurrentUICulture来解决这个问题。

例如,如果您的程序集位于 C:\Program Files\MyCompany\App\ 并且当前 UI 文化是 en_US,则可以将两者结合起来:

string exeDir = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase);
string culture = CultureInfo.CurrentUICulture.Name;

string langDir = System.IO.Path.Combine(exeDir, culture);

生成“C:\Program Files\MyCompany\App\en_US”

于 2012-11-06T16:55:29.590 回答