我的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);
}
}
答案 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”