Как узнать местонахождение текущей спутниковой сборки культуры?
Мое приложение C#/WF использует несколько файлов, которые отличаются для разных языков. Эти файлы не могут быть размещены в качестве ресурсов в сателлитных сборках. Однако я хочу поместить их в те же каталоги, в которых находятся сателлитные сборки, но мне нужно знать, где на самом деле находится сборка (включая ситуацию, когда используется язык по умолчанию, встроенный в двоичный файл).
Например, когда приложение автоматически переключается на польский язык, я хочу получить местоположение:
D: \<папка приложения>\ pl-PL \
Есть ли способ сделать это? Обратите внимание, что я хочу получить эту информацию из сборки, а не угадывать местоположение папки.
С помощью Стива Б, вот решение:
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 ответа
Вы можете использовать текущую культуру пользовательского интерфейса потока, чтобы получить язык:
var subfolder = System.Threading.Thread.CurrentUICulture.Name;
Я чувствую, что вы могли бы использовать комбинацию System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase)
а также CultureInfo.CurrentUICulture
чтобы понять это.
Например, если ваша сборка находится в C:\Program Files\MyCompany\App\ и текущая культура пользовательского интерфейса - 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"