Visual Studio - Fichier Resx par défaut «interne» à «public»


165

Chaque fois que j'édite un fichier de ressources dans VS, il régénère le code correspondant et définit le modificateur d'accès à la classe sur internal.
C'est pénible de Ctrl-F -> ReplaceAll chaque fois que je modifie le resx. Y a-t-il une propriété / un paramètre pour que je puisse par défaut cela en public?

internal class MyResource {

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

}

J'ai besoin que tout cela internalsoit publictout le temps.


@jvanrhyn: Parce que j'ai besoin d'accéder à son gestionnaire de ressources à partir d'un autre projet de la solution.
Robin Maben

Réponses:


335

Au lieu de ResXFileCodeGenerator, utilisez le PublicResXFileCodeGenerator.

Vous pouvez le faire en définissant cela comme la propriété Outil personnalisé dans la fenêtre Propriétés du fichier Resx auquel vous souhaitez accéder au public.

Modifier : vous pouvez également définir le modificateur d'accès sur public lorsque vous ouvrez le fichier resx dans Visual Studio. La liste déroulante Modificateur d'accès se trouve en haut du formulaire.


13
(Bonne réponse; mais juste quelques notes; cela pourrait aussi être GlobalResourceProxyGenerator, pas seulement ResXFileCodeGenerator; et notez aussi que le menu déroulant "Access Modofier" est souvent désactivé)
Marc Gravell

@Anton: Merci, ça marche dans mon cas. De plus, j'ai remarqué que la modification du modificateur d'accès à partir de la liste déroulante modifie l'outil correspondant.
Robin Maben

1
@conqenator: c'est pourquoi j'ai proposé d'utiliser le menu déroulant Access Modifier comme moyen alternatif d'atteindre le même résultat :)
Anton

2
BTW si la liste déroulante Modificateur d'accès est désactivée, vous pouvez essayer de changer la propriété Outil personnalisé en ResXFileCodeGenerator, si ce n'est pas déjà la valeur. Au moins cela fonctionne pour moi dans un projet MVC sur VS 2010.
Manuel Navarro

1
Pour moi, avec Visual Studio 2017, choisir le PublicResXFileCodeGeneratorseul rend la classe Resources publique, pas son constructeur.
Laurent Michel

13
  1. Cliquez avec le bouton droit sur Fichier de ressources ( resource.resx) => Propriétés .

  2. Outil personnalisé => Passer àPublicResXFileCodeGenerator


-7

Le moyen le plus simple est peut-être de créer une classe dérivée avec un ctor public?

La classe générée:

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

La classe dérivée:

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

    }
}

13
Ce n'est pas possible. Vous obtiendrez une erreur CS0060 Accessibilité incohérente: la classe de base 'Strings' est moins accessible que la classe 'PublicStrings'
David Gardiner
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.