Visual Studio - ไฟล์ Resx เริ่มต้น 'ภายใน' เป็น 'สาธารณะ'


165

ทุกครั้งที่ฉันแก้ไขไฟล์ทรัพยากรใน VS มันจะสร้างรหัสที่สอดคล้องกันใหม่และตั้งค่าตัวดัดแปลงการเข้าถึงคลาสให้เป็นภายใน
มันเป็นความเจ็บปวดของ Ctrl-F -> ReplaceAll ทุกครั้งที่ฉันแก้ไข resx มีสถานที่ให้บริการ / การตั้งค่าเพื่อให้ฉันสามารถเริ่มต้นนี้เป็นสาธารณะ

internal class MyResource {

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

}

ฉันต้องการทุกคนที่internalจะอยู่publicตลอดเวลา


@jvanrhyn: เพราะฉันต้องการเข้าถึงตัวจัดการทรัพยากรจากโครงการอื่นในการแก้ปัญหา
Robin Maben

คำตอบ:


335

แทนการใช้ResXFileCodeGeneratorPublicResXFileCodeGenerator

คุณสามารถทำได้โดยการตั้งค่านี้เป็นคุณสมบัติเครื่องมือที่กำหนดเองในหน้าต่างคุณสมบัติสำหรับไฟล์ Resx ที่คุณต้องการเข้าถึงสาธารณะ

แก้ไข : สลับกันคุณสามารถตั้งค่าตัวปรับเปลี่ยนการเข้าถึงเป็นสาธารณะเมื่อคุณเปิดไฟล์ resx ใน Visual Studio กล่องดร็อปดาวน์ Access Modifier สามารถพบได้ที่ด้านบนของแบบฟอร์ม


13
(คำตอบที่ดี แต่มีเพียงบางบันทึกมันอาจเป็นGlobalResourceProxyGeneratorได้ไม่ใช่เพียงแค่ResXFileCodeGeneratorและโปรดทราบด้วยว่าการเลื่อนลงของ "Access Modofier" มักจะถูกปิดใช้งาน)
Marc Gravell

@ แอนตัน: ขอบคุณทำงานในกรณีของฉัน นอกจากนี้ฉันสังเกตเห็นว่าการเปลี่ยน access modifier จากดร็อปดาวน์จะเปลี่ยนเครื่องมือที่เกี่ยวข้อง
Robin Maben

1
@conqenator: นั่นเป็นเหตุผลที่ฉันเสนอให้ใช้ตัวเลือกดรอปดาวน์ของ Access Modifier เป็นทางเลือกในการเข้าถึงผลลัพธ์เดียวกัน :)
Anton

2
BTW หากปิดการใช้งานตัวเลื่อนการเข้าถึงตัวแก้ไขคุณสามารถลองเปลี่ยนคุณสมบัติเครื่องมือที่กำหนดเองเป็น ResXFileCodeGenerator หากนั่นไม่ใช่ค่า alredy อย่างน้อยก็ใช้ได้กับฉันในโครงการ MVC ใน VS 2010
Manuel Navarro

1
สำหรับฉันด้วย Visual Studio 2017 การเลือกPublicResXFileCodeGeneratorทำให้คลาส Resource เป็นสาธารณะไม่ใช่ตัวสร้าง
Laurent Michel

13
  1. คลิกขวาที่ไฟล์ทรัพยากร ( resource.resx) => คุณสมบัติ

  2. เครื่องมือที่กำหนดเอง => เปลี่ยนเป็นPublicResXFileCodeGenerator


-7

บางทีวิธีที่ง่ายที่สุดคือการสร้างคลาสที่ได้จาก ctor สาธารณะ?

คลาสที่สร้างขึ้น:

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

คลาสที่ได้รับ:

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

    }
}

13
สิ่งนี้เป็นไปไม่ได้ คุณจะได้รับข้อผิดพลาดการเข้าถึงที่ไม่สอดคล้องกัน CS0060: คลาสพื้นฐาน 'Strings' เข้าถึงได้น้อยกว่าคลาส 'PublicStrings'
David Gardiner
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.