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.