Visual Studio - File Resx predefinito da "interno" a "pubblico"


165

Ogni volta che modifico un file di risorse in VS, rigenera il codice corrispondente e imposta il modificatore di accesso alla classe su interno.
È un dolore per Ctrl-F -> Sostituisci tutte le volte che modifico il resx. Esiste una proprietà / impostazione in modo che io possa impostarla come pubblica?

internal class MyResource {

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

}

Ho bisogno che tutti quelli internalsiano publicsempre.


@jvanrhyn: Perché ho bisogno di accedere al suo gestore risorse da un altro progetto nella soluzione.
— Robin Maben,

Risposte:


334

Invece di ResXFileCodeGenerator, usa il PublicResXFileCodeGenerator.

Puoi farlo impostandolo come proprietà dello strumento personalizzato nella finestra delle proprietà per il file Resx a cui desideri accedere al pubblico.

Modifica : in alternativa puoi impostare il modificatore di accesso su pubblico quando apri il file resx in Visual Studio. La casella a discesa Modificatore di accesso si trova nella parte superiore del modulo.


13
(Buona risposta; ma solo alcune note; potrebbe anche essere GlobalResourceProxyGenerator, non solo ResXFileCodeGenerator; e nota anche che il menu a discesa "Access Modofier" è spesso disabilitato)
— Marc Gravell

@Anton: grazie, funziona nel mio caso. Inoltre, ho notato che la modifica del modificatore di accesso dal menu a discesa modifica lo strumento corrispondente.
— Robin Maben,

1
@conqenator: ecco perché ho proposto di utilizzare il menu a discesa Modificatore di accesso come un modo alternativo per raggiungere lo stesso risultato :)
— Anton

2
A proposito, se il menu a discesa Modificatore di accesso è disabilitato, puoi provare a cambiare la proprietà dello strumento personalizzato in ResXFileCodeGenerator, se non è il valore alredy. Almeno questo lavoro per me in un progetto MVC su VS 2010.
— Manuel Navarro,

1
Per me con Visual Studio 2017 la scelta PublicResXFileCodeGeneratordell'unica rende pubblica la classe Resources, non il suo costruttore.
— Laurent Michel,

13
  1. Fare clic con il tasto destro su File di risorse ( resource.resx) => Proprietà .

  2. Strumento personalizzato => Cambia inPublicResXFileCodeGenerator


-7

Forse il modo più semplice è creare una classe derivata con un ctor pubblico?

La classe generata:

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

La classe derivata:

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

    }
}

13
Non è possibile. Verrà visualizzato un errore CS0060 Accessibilità incoerente: la classe base 'Stringhe' è meno accessibile della classe 'PublicStrings'
— David Gardiner
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.