Как узнать местонахождение текущей спутниковой сборки культуры?

Мое приложение 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"

Другие вопросы по тегам