Visual Studio - plik Resx domyślnie „wewnętrzny” na „publiczny”

165

Za każdym razem, gdy edytuję plik zasobów w VS, ponownie generuje on odpowiedni kod i ustawia modyfikator dostępu do klasy na wewnętrzny.
Uciążliwe jest Ctrl-F -> ReplaceAll za każdym razem, gdy edytuję resx. Czy istnieje właściwość / ustawienie, które mogę ustawić jako publiczne?

internal class MyResource {

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

}

Muszę mieć internalto publicwszystko przez cały czas.

Robin Maben
źródło
@jvanrhyn: Ponieważ muszę uzyskać dostęp do menedżera zasobów z innego projektu w rozwiązaniu.
Robin Maben

Odpowiedzi:

335

Zamiast tego ResXFileCodeGeneratorużyj PublicResXFileCodeGenerator.

Możesz to zrobić, ustawiając to jako właściwość narzędzia niestandardowego w oknie właściwości dla pliku Resx, do którego chcesz mieć publiczny dostęp.

Edycja : alternatywnie możesz ustawić modyfikator dostępu jako publiczny po otwarciu pliku resx w programie Visual Studio. Pole rozwijane Modyfikator dostępu znajduje się u góry formularza.

Anton
źródło
13
(Dobra odpowiedź; ale tylko kilka uwag; może to być również GlobalResourceProxyGeneratornie tylko ResXFileCodeGenerator; i zauważ również, że menu rozwijane „Access Modofier” jest często wyłączone)
Marc Gravell
@Anton: Dzięki, w moim przypadku działa. Zauważyłem również, że zmiana modyfikatora dostępu z listy rozwijanej zmienia odpowiednie narzędzie.
Robin Maben
1
@conqenator: dlatego zaproponowałem użycie listy rozwijanej Access Modifier jako alternatywnego sposobu osiągnięcia tego samego wyniku :)
Anton
2
BTW, jeśli lista rozwijana modyfikatora dostępu jest wyłączona, możesz spróbować zmienić właściwość narzędzia niestandardowego na ResXFileCodeGenerator, jeśli nie jest to wartość alredy. Przynajmniej to zadziałało dla mnie w projekcie MVC na VS 2010.
Manuel Navarro
1
Dla mnie z Visual Studio 2017 wybranie PublicResXFileCodeGeneratorjedynej powoduje, że klasa Resources jest publiczna, a nie jej konstruktor.
Laurent Michel,
13
  1. Kliknij prawym przyciskiem myszy plik zasobów ( resource.resx) => Właściwości .

  2. Narzędzie niestandardowe => Zmień naPublicResXFileCodeGenerator

user274294
źródło
-7

Być może najłatwiejszym sposobem jest utworzenie klasy pochodnej za pomocą publicznego edytora?

Wygenerowana klasa:

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

Klasa pochodna:

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

    }
}
Trond Ivar Lindberg
źródło
13
To jest niemożliwe. Pojawi się błąd CS0060 Niespójna dostępność: klasa bazowa „Ciągi znaków” jest mniej dostępna niż klasa „PublicStrings”
David Gardiner