คุณเริ่มต้นคลาสใหม่เป็นสาธารณะได้อย่างไรเมื่อสร้างใน Visual Studio


111

เมื่อฉันคลิกขวาในโซลูชันของโปรเจ็กต์ C # Visual Studio แล้วเลือกเพิ่ม ... > คลาส ... มันจะสร้างคลาสโดยไม่มีตัวปรับแต่งสาธารณะ ฉันจะทำให้ Visual Studio (2008) เริ่มต้นคลาสเป็นคลาสสาธารณะได้อย่างไร


1
คุณจำเป็นต้องเปลี่ยนแม่แบบชั้นเรียนตามที่อธิบายไว้ที่นี่ มีส่วนเกี่ยวข้องมากกว่าการแก้ไขไฟล์เดียวเล็กน้อย (ซึ่งเป็นสิ่งที่คุณคาดหวัง) แต่ก็ไม่ได้ฟังดูแย่เกินไป
Jon Skeet

คำตอบ:


71

คุณต้องแก้ไขไฟล์ที่อยู่ในC:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplates\CSharp\Code\1033.

Visual Studio 2010 (10.0) และต่ำกว่า:มีไฟล์ zip อยู่ในนั้นชื่อ Class.zip แกะสิ่งนี้แก้ไขไฟล์เพื่อใส่publicคีย์เวิร์ดของคุณจากนั้นทำการแพ็คใหม่ (ตรวจสอบให้แน่ใจว่าคุณได้สำรองข้อมูลต้นฉบับไว้)

หลังจากนี้ตรวจสอบให้แน่ใจว่า VS สร้างแคชใหม่ (ซึ่งเป็นเพียงไฟล์ zip ที่แตกไฟล์ลงในไดเร็กทอรีC:\Program Files\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplatesCache) โดยเปิดเชลล์คำสั่ง Visual Studio และดำเนินการคำสั่งต่อไปนี้:

devenv /installvstemplates

Visual Studio 2012 (11.0) ขึ้นไป: ดูคำตอบโดย @JochemKempeเนื่องจากตอนนี้การเปลี่ยนแปลงทำได้ง่ายกว่ามากเพียงแค่แก้ไขไฟล์เดียว (ไม่มีการคลายซิปหรือการซิปซ้ำ)

อัปเดต:อย่าลืมเปิดโปรแกรมแก้ไขข้อความที่คุณต้องการด้วยสิทธิ์ของผู้ดูแลระบบก่อนที่คุณจะทำการแก้ไขใด ๆ


ขอบคุณมาก ใน 64 บิต Windows 7 เครื่องกับ VS 2012 เส้นทางนี้อยู่ที่ C: \ Program Files (x86) \ Microsoft Visual Studio 11.0 \ Common7 \ IDE \ ItemTemplates \ CSharp
Sudhanshu Mishra

จะเป็นอย่างไรหากคุณต้องการเปลี่ยนเทมเพลตไอเท็มระหว่างทีมบนเครื่องจักรต่างๆมีแนวคิดอย่างไร
DevDave

ใน VS2013 คุณจะต้องเรียกใช้พรอมต์คำสั่งสำหรับนักพัฒนาสำหรับ VS2013 ในฐานะผู้ดูแลระบบและเรียกใช้คำสั่งหลังจากปิด Visual Studio - จะไม่เสร็จสมบูรณ์ในขณะที่ VS เปิดอยู่
Chris Moschini

1
ไม่จำเป็นต้องไปที่บล็อกโพสต์ที่ @Guy อ้างอิงเนื่องจากโพสต์ได้รับการแก้ไขเพื่อรวมข้อมูลที่พบไว้ในนั้น หากคุณต้องการเยี่ยมชมบล็อกโพสต์นั้นตอนนี้ได้ย้ายไปที่ URL ใหม่แล้ว: guyellisrocks.com/2009/03/…
ErikE

151

ในVS2012นั้นง่ายพอ ๆ กับการไปC:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates\CSharp\Code\1033\Classและแก้ไขไฟล์ Class.cs

ไม่จำเป็นต้องเปิดเครื่องรูดหรือสร้างแคชใหม่ การเปลี่ยนแปลงในเชิงบวกมากถ้าคุณถามฉัน

VS2015 :C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class

VS2017 (RC) :C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class

VS2017 (มืออาชีพ) :C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class

VS2019 (องค์กร) :C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs

VS2019 (มืออาชีพ) :C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs

เก่า

VS2019 (ดูตัวอย่าง) :C:\Program Files (x86)\Microsoft Visual Studio\2019\Preview\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs


2
ดูเหมือนจะไม่ได้ผลสำหรับฉัน ฉันยังแทนที่ไฟล์ Class.cs ในไดเร็กทอรี ItemTemplatesCache ด้วย รีบูต VS2012 ทุกครั้ง มีวิธีสร้างแคชใหม่หรือไม่?
ขยี้

7
สำหรับ VS2013 ให้ใช้ตำแหน่งนี้: C: \ Program Files (x86) \ Microsoft Visual Studio 12.0 \ Common7 \ IDE \ ItemTemplates \ CSharp \ Code \ 1033 \ Class
Zar Shardan

6
คุณอาจต้องเปิดโปรแกรมแก้ไขข้อความในโหมดผู้ดูแลระบบเพื่ออัปเดตเทมเพลตชั้นเรียนจริง
david.barkhuizen

3
สำหรับ VS2015 ให้ใช้ตำแหน่งนี้: C: \ Program Files (x86) \ Microsoft Visual Studio 14.0 \ Common7 \ IDE \ ItemTemplates \ CSharp \ Code \ 1033 \ Class อย่างไรก็ตามหากคุณติดตั้ง Xamarin คุณอาจต้องทำการค้นหา คุณขับ windows สำหรับ "Class.cs" ฉันเพิ่งเปลี่ยนผลลัพธ์ทั้งหมดเป็นสาธารณะ
JochemKempe

2
Visual Studio 2019 พร้อมให้บริการแล้วดังนั้นการแสดงตัวอย่างควรเปลี่ยนเพื่อระบุเวอร์ชัน ฉันติดตั้ง Professional เท่านั้น แต่ฉันเดาว่าอีกสองคนน่าจะเป็น Community และ Enterprise VS2019 Professional:C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs
Dave Thompson

10

ในการสร้างคลาสสาธารณะโดยค่าเริ่มต้นสำหรับ Visual Studio 2012:

แก้ไขไฟล์นี้:

C:\Program Files (x86)\Microsoft Visual Studio 11.0\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs

มีลักษณะดังนี้:

using System;
using System.Collections.Generic;
$if$ ($targetframeworkversion$ >= 3.5)using System.Linq;
$endif$using System.Text;
$if$ ($targetframeworkversion$ >= 4.5)using System.Threading.Tasks;
$endif$
namespace $rootnamespace$
{
    public class $safeitemrootname$
    {
    }
}

3

คุณสามารถสร้างเทมเพลตโครงการของคุณเองหรือแก้ไขเทมเพลตที่มีอยู่ก็ได้ ไฟล์โปรเจ็กต์ทั้งหมดเหล่านี้ขับเคลื่อนด้วยเทมเพลตดังนั้นคุณสามารถแก้ไขและ / หรือเพิ่มไฟล์ของคุณเองได้

ตรวจสอบลิงค์เหล่านี้:

มาร์ค


3

นี่คืออีกครั้งเข้าคริปต PS ที่จะอัปเดต C # ชั้นฐานแม่แบบรายการ เส้นทางจะเปลี่ยนไปขึ้นอยู่กับเวอร์ชัน / รุ่นของ Visual Studio ที่คุณใช้ นอกจากนี้ยังสำรองแม่แบบเดิมในกรณีที่คุณต้องการเปลี่ยนกลับในอนาคต

$csharpClassTemplates = @("C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs",
                          "C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ItemTemplatesCache\CSharp\Code\1033\Class\Class.cs",
                          "C:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\ItemTemplates\CSharp\Code\1033\Class\Class.cs")

$csharpClassTemplates | % {
    Write-Output("Updating template $_")
    Copy-Item $_ -Destination "$_.backup"
    (get-content $_).Replace('public ', '').Replace('class ', 'public class ') | Set-Content $_
 }

เส้นทางของฉันคือ..\2017\Professional\...และฉันแก้ไขด้วยตนเอง แต่สิ่งนี้แสดงให้เห็นโครงสร้างโฟลเดอร์ใหม่สำหรับปี 2017 ขอบคุณ
ste-fu

2

นอกจากคำตอบที่ยอดเยี่ยมของ JochemKempe แล้วนี่คือวิธีการทำสำหรับเทมเพลตหลักของ. NET


.NET Core

แทนที่จะแก้ไขแม่แบบภายในไดเรกทอรีคุณจำเป็นต้องแก้ไขคนที่อยู่ภายใน\CSharp\\AspNetCore\

VS2019 (องค์กร) :C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\Common7\IDE\ItemTemplates\AspNetCore\Code\1033\Class\Class.cs

VS2019 (มืออาชีพ) :C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\Common7\IDE\ItemTemplates\AspNetCore\Code\1033\Class\Class.cs


1

คำตอบจาก JochemKempe ใช้งานได้ดี แต่ค่อนข้างยากเนื่องจากคุณต้องเขียนไฟล์ที่มีการป้องกันใหม่ในรูปแบบProgram Files.

เพื่ออัปเดตคำตอบเท่านั้น เทมเพลตสำหรับรุ่น Community อยู่ในโฟลเดอร์:

c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\ProjectTemplates

อีกวิธีหนึ่ง

แต่มีความเป็นไปได้อื่นในการสร้างเทมเพลตใหม่ คัดลอกไฟล์จากโฟลเดอร์ต้นทางไปยังโฟลเดอร์เทมเพลตผู้ใช้

เช่นสำหรับแอปพลิเคชัน Windows Form อาจเป็นหนึ่งในโฟลเดอร์ซอร์สเหล่านี้(สำหรับ Visual Studio 2017 Community) :

c:\Program Files (x86)\Microsoft Visual Studio\2017\Community\Common7\IDE\ProjectTemplates\CSharp\Windows Root\Windows\1033\WindowsApplication\
c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplates\CSharp\Windows Root\Windows\1033\WindowsApplication\
c:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\ProjectTemplatesCache\CSharp\Windows Root\Windows\1033\WindowsApplication\

โฟลเดอร์เทมเพลตผู้ใช้เริ่มต้นคือ(สำหรับ Visual Studio 2017 Community) :

C:\Users\<username>\Documents\Visual Studio 2017\Templates\ProjectTemplates\

และโฟลเดอร์ปลายทางสำหรับเทมเพลต Windows Form Application ใหม่จะเป็น:

C:\Users\<username>\Documents\Visual Studio 2017\Templates\ProjectTemplates\Visual C#\Windows\1033\MyWindowsApplication\

ด้วยวิธีนี้คุณจะมี "Windows Form Application" สองรายการเมื่อสร้างโครงการใหม่ ความแตกต่างระหว่างสองสิ่งนี้อยู่ในชื่อไฟล์เริ่มต้นเท่านั้น เพื่อสร้างความแตกต่างที่ดีขึ้นคุณสามารถเปลี่ยนชื่อที่แสดงของเทมเพลตได้ หากต้องการเปลี่ยนชื่อเทมเพลตให้อัปเดต.vstemplateไฟล์

ต้นฉบับcsWindowsApplication.vstemplateประกอบด้วยบรรทัด:

    <Name Package="{FAE04EC1-301F-11d3-BF4B-00C04F79EFBC}" ID="2318" />

ในการเปลี่ยนชื่อคุณต้องเปลี่ยนบรรทัดเป็นดังนี้:

    <Name ID="2318">My Windows Form Application</Name>

ส่วนเชิงลบของวิธีนี้คือการที่คุณต้องเปลี่ยนชื่อใหม่ของคุณแม่และคุณเพิ่มแม่แบบใหม่แม่แบบที่มีอยู่(เก่าตัวอย่างเช่น 'ถูกต้อง' จะยังคงอยู่และคุณยังสามารถใช้มันไม่เต็มใจ)

แต่ก็มีส่วนดีเช่นกัน คุณไม่จำเป็นต้องเป็นผู้ดูแลระบบเพื่อเพิ่มหรืออัปเดตตัวอย่าง (ไม่จำเป็นต้องเขียนไฟล์ในProgram Filesโฟลเดอร์ใหม่)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.