Если вы используете веб-сайты (шаблон проекта веб-сайтов ASP.NET), вы можете сделать это: HttpContext.GetGlobalResourceObject(classKey, resourceKey)
, где classKey - это имя вашего файла .resx, а resourceKey - локализованная строка в вашем ресурсе.
Если вы используете WebApplications и у вас есть ресурсы в качестве отдельного проекта (библиотека C #), вы можете взглянуть на этот код:
public class SatelliteResourceManager
{
private const string Resources = "Resources";
private readonly string _assemblyName;
public SatelliteResourceManager(string assemblyName)
{
_assemblyName = assemblyName;
}
public Assembly Assembly { get { return Assembly.Load(_assemblyName); } }
protected IEnumerable<Type> ResourceTypes
{
get
{
return Assembly.GetTypes().Where(a => a.IsClass && a.Namespace == Resources);
}
}
public IEnumerable<ResourceManager> GetAllManagers()
{
foreach (var manager in ResourceTypes)
{
yield return (ResourceManager) manager.GetProperty("ResourceManager").GetValue(this, null);
}
}
public string GetGlobalResource(string classKey, string resourceKey, string fallback)
{
var manager = GetAllManagers().FirstOrDefault(m => m.BaseName.EndsWith(classKey, StringComparison.InvariantCultureIgnoreCase));
if (manager != null) return manager.GetString(resourceKey);
return fallback;
}
}
Вам нужно создать экземпляр класса попередавая параметр с именем сборки проекта вашего ресурса, вы можете получить эту информацию из свойств проекта.Я также добавил поле «Ресурсы», это может быть полезно, если вы решили переопределить пространство имен по умолчанию для каждого файла .resx, учтите, что вы можете расширить этот класс, чтобы разрешить несколько «пространств имен» для файлов .resx (скриншот прилагается))