Visual Studio - файл Resx по умолчанию «внутренний» для «public»


165

Каждый раз, когда я редактирую файл ресурсов в VS, он регенерирует соответствующий код и устанавливает модификатор доступа к классу Internal.
Ctrl-F -> ReplaceAll - это боль каждый раз, когда я редактирую resx. Есть ли свойство / настройка, чтобы я мог по умолчанию это публично?

internal class MyResource {

     internal static global::System.Resources.ResourceManager ResourceManager {...}

}

Мне нужно, internalчтобы publicвсе это было постоянно.


@jvanrhyn: потому что мне нужно получить доступ к его менеджеру ресурсов из другого проекта в решении.
Робин Мабен

Ответы:


335

Вместо ResXFileCodeGenerator, используйте PublicResXFileCodeGenerator.

Вы можете сделать это, установив его в качестве свойства пользовательского инструмента в окне свойств для файла Resx, к которому вы хотите получить общий доступ.

Изменить : В качестве альтернативы вы можете установить модификатор доступа общедоступным при открытии файла resx в Visual Studio. Раскрывающийся список «Модификатор доступа» находится в верхней части формы.


13
(Хороший ответ; но только некоторые примечания; это также может быть GlobalResourceProxyGeneratorне просто ResXFileCodeGenerator; обратите внимание также на то, что выпадающий список «Access Modofier» часто отключается)
Марк Гравелл

@Anton: Спасибо, работает в моем случае. Кроме того, я заметил, что изменение модификатора доступа из выпадающего меню изменяет соответствующий инструмент.
Робин Мабен

1
@conqenator: вот почему я предложил использовать раскрывающийся список «Модификатор доступа» в качестве альтернативного способа достижения того же результата :)
Антон

2
Кстати, если раскрывающийся список «Модификатор доступа» отключен, вы можете попробовать изменить свойство Custom Tool на ResXFileCodeGenerator, если это не значение alredy. По крайней мере, это работает для меня в проекте MVC на VS 2010.
Мануэль Наварро

1
Для меня с Visual Studio 2017 выбор PublicResXFileCodeGeneratorтолько делает общедоступным класс Resources, а не его конструктор.
Лоран Мишель

13
  1. Щелкните правой кнопкой мыши файл ресурсов ( resource.resx) => Свойства .

  2. Пользовательский инструмент => Изменить наPublicResXFileCodeGenerator


-7

Возможно, самый простой способ - создать производный класс с публичным ctor?

Сгенерированный класс:

 [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")]
    internal Strings() {
    }

Производный класс:

public class PublicStrings : Strings
{
    /// <summary>
    /// Public localization Strings.
    /// </summary>
    public PublicStrings()
    {

    }
}

13
Это невозможно. Вы получите ошибку CS0060. Непоследовательная доступность: базовый класс 'Strings' менее доступен, чем класс 'PublicStrings'
Дэвид Гардинер
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.