如何获得当前文化卫星装配的位置?

时间:2012-11-06 16:48:06

标签: c# winforms satellite-assembly

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

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

D:\< app folder> \ pl-PL \

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


在Steve 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);
    }
}

2 个答案:

答案 0 :(得分:1)

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

var subfolder = System.Threading.Thread.CurrentUICulture.Name;

答案 1 :(得分:-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”