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

user274294
источник
-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'
Дэвид Гардинер