Visual Studio - Archivo Resx predeterminado 'interno' a 'público'


165

Cada vez que edito un archivo de recursos en VS, regenera el código correspondiente y establece el modificador de acceso de clase en interno.
Ctrl-F -> Reemplazar todo es una molestia cada vez que edito el resx. ¿Hay una propiedad / configuración para que pueda establecer esto por defecto en público?

internal class MyResource {

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

}

Necesito que todos internalestén publictodo el tiempo.


@jvanrhyn: Porque necesito acceder a su administrador de recursos desde otro proyecto en la solución.
Robin Maben el

Respuestas:


335

En lugar de ResXFileCodeGeneratorusar el PublicResXFileCodeGenerator.

Puede hacerlo estableciendo esto como la propiedad Herramienta personalizada en la Ventana de propiedades para el archivo Resx al que desea acceso público.

Editar : Alternativamente, puede configurar el Modificador de acceso como público cuando abre el archivo resx en Visual Studio. El cuadro desplegable Modificador de acceso se puede encontrar en la parte superior del formulario.


13
(Buena respuesta; pero solo algunas notas; también podría ser GlobalResourceProxyGenerator, no solo ResXFileCodeGenerator; y tenga en cuenta también que el menú desplegable "Access Modofier" a menudo está desactivado)
Marc Gravell

@ Anton: Gracias, funciona en mi caso. Además, noté que cambiar el modificador de acceso desde el menú desplegable cambia la herramienta correspondiente.
Robin Maben el

1
@conqenator: por eso propuse usar el menú desplegable Modificador de acceso como una forma alternativa de alcanzar el mismo resultado :)
Anton

2
Por cierto, si el menú desplegable Modificador de acceso está deshabilitado, puede intentar cambiar la propiedad Herramienta personalizada a ResXFileCodeGenerator, si ese no es el valor garantizado. Al menos ese trabajo para mí en un proyecto MVC en VS 2010.
Manuel Navarro

1
Para mí, con Visual Studio 2017, elegir el PublicResXFileCodeGeneratorúnico hace pública la clase Resources, no su constructor.
Laurent Michel

13
  1. Haga clic derecho en el archivo de recursos ( resource.resx) => Propiedades .

  2. Herramienta personalizada => Cambiar aPublicResXFileCodeGenerator


-7

¿Quizás la forma más fácil es crear una clase derivada con un ctor público?

La clase generada:

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

La clase derivada:

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

    }
}

13
Esto no es posible. Obtendrá un error CS0060 Accesibilidad inconsistente: la clase base 'Strings' es menos accesible que la clase 'PublicStrings'
David Gardiner
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.