จะทำให้ห้องสมุดบุคคลที่สามเป็นปัจจุบันได้อย่างไร?


28

สมมติว่าฉันมีโครงการที่ขึ้นอยู่กับห้องสมุด 10 แห่งและภายในโครงการของฉันฉันสามารถใช้ไลบรารี่รุ่นใดก็ได้ ดังนั้นฉันเริ่มต้นด้วยรุ่นล่าสุด จากนั้นแต่ละไลบรารีจะได้รับการอัพเดตเดือนละครั้ง (โดยเฉลี่ย) ตอนนี้การรักษาลำตัวของฉันให้ทันสมัยอยู่เสมอจะต้องอัพเดตการอ้างอิงห้องสมุดทุกสามวัน

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

คุณจัดการกับสิ่งนี้ได้อย่างไร แนวทางที่เป็นไปได้บางประการ:

  • ถ้าไม่ได้ยากจนไม่สามารถแก้ไขได้ อยู่กับไลบรารี่รุ่นปัจจุบันของคุณตราบใดที่คุณไม่สังเกตเห็นอะไรผิดปกติกับไลบรารี่ที่ใช้ในแอปพลิเคชั่นของคุณ การเปลี่ยนแปลงเล็ก ๆ น้อย ๆ ที่เพิ่มขึ้นนั้นเป็นเพียงของเสีย
  • อัปเดตบ่อยครั้งเพื่อให้การเปลี่ยนแปลงเล็ก ๆ เนื่องจากคุณจะต้องอัปเดตทุกวันไม่ว่ากรณีใด ๆ จึงเป็นการดีกว่าที่จะอัปเดตบ่อยครั้งเพื่อให้คุณสังเกตเห็นปัญหาก่อนเวลาเมื่อแก้ไขได้ง่ายแทนที่จะกระโดดข้ามหลายเวอร์ชันและปล่อยให้ปัญหาที่อาจเกิดขึ้นสะสม
  • บางสิ่งบางอย่างในระหว่าง มีจุดหวานหรือไม่?

1
+1: ฉันสงสัยว่าถ้าชอบ "นักล่าบั๊ก" คุณอาจมี "Update Sprint" ซ้ำในโครงการ อยากรู้เกี่ยวกับคำตอบ :)
Matthieu

คำตอบ:


25

ฉันตกใจและตกใจจริง ๆ ตามจำนวนคำตอบที่นี่โดยบอกว่า "ไม่ต้องอัปเดตจนกว่าคุณจะต้อง" ฉันทำอย่างนั้นแล้วและในขณะที่มันง่ายขึ้นในระยะสั้น แต่มันก็ไหม้เหมือนนรกในระยะยาว การอัพเดตที่มีขนาดเล็กและบ่อยครั้งมากขึ้นนั้นง่ายต่อการจัดการมากกว่าครั้งใหญ่และคุณจะได้รับประโยชน์จากคุณสมบัติใหม่การแก้ไขข้อบกพร่องและอื่น ๆ ในไม่ช้า

ฉันไม่ได้ซื้อแนวคิดนี้ว่าการเปลี่ยนแปลงห้องสมุดจะทดสอบได้ยากกว่าการเปลี่ยนรหัส มันเหมือนกัน - คุณกำลังทำการเปลี่ยนแปลงกับ codebase และคุณจำเป็นต้องตรวจสอบก่อนที่จะคอมมิทและลึกมากขึ้นก่อนที่คุณจะปล่อย แต่คุณต้องมีกระบวนการในการทำเช่นนี้เนื่องจากคุณทำการเปลี่ยนแปลงรหัส!

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

ตอนนี้คำถามคือสิ่งที่คุณทำถ้ามีการปรับปรุงสิ่งต่าง ๆ - คุณใช้เวลาในการแก้ไขหรือปล่อยมันออกมา? ฉันขอแนะนำให้เอนไปข้างหลัง หากสามารถแก้ไขได้ในหนึ่งชั่วโมงให้ทำ แต่ถ้าการอัปเดตจะใช้งานที่สำคัญเพื่อรวมเข้าด้วยกันให้ยกมันเป็นงานพัฒนาของตัวเองเพื่อประเมินจัดลำดับความสำคัญและกำหนดเวลาเหมือนกับงานอื่น ๆ โอกาสที่จะเกิดขึ้นหากไม่ได้รับการแก้ไขหรือปรับปรุงที่สำคัญมากลำดับความสำคัญจะต่ำและคุณจะไม่มีทางแก้ไข แต่คุณไม่มีทางรู้ว่าเมื่อถึงวันที่มีการอัพเดทซ้ำในวันถัดไปปัญหาอาจจะแก้ไขได้เอง อย่างน้อยตอนนี้คุณก็รู้ว่ามีสิ่งกีดขวางบนเส้นทางการอัพเดทและมันจะไม่ทำให้คุณประหลาดใจ

หากคุณไม่ได้ทำซ้ำความยาวนั้นฉันจะตั้งค่ากำหนดการแบบสแตนด์อโลนสำหรับการอัปเดตบางประเภท - ไม่เกินรายเดือน มีจังหวะโครงการอื่นที่คุณสามารถผูกมันไว้กับเช่นการตรวจสอบสถานะรายเดือนหรือการประชุมคณะกรรมการสถาปัตยกรรม? วันจ่าย? พิซซ่าไนท์ พระจันทร์เต็มดวง? ไม่ว่าคุณจะต้องการอะไรที่สั้นกว่ารอบการปล่อยแบบดั้งเดิมมากเพราะการพยายามอัพเดททุกอย่างในคราวเดียวทุก ๆ 6-18 เดือนจะเจ็บปวดและทำให้เสียศีลธรรม

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


3
+1 ฉันทำงานในโครงการที่ผู้พัฒนาใช้นโยบาย "หากยังไม่พังก็ไม่สามารถแก้ไขได้" จากนั้นเราพบปัญหากับห้องสมุดของบุคคลที่สาม (ค่อนข้างน้อย แต่ก็จำเป็นสำหรับคุณสมบัติใหม่) ซึ่งได้รับการแก้ไขในรุ่นที่ใหม่กว่าเท่านั้นซึ่งจะขึ้นอยู่กับ jvm ในภายหลัง ด้วย jvm ในภายหลังเราพบปัญหากับห้องสมุดบุคคลที่สามอื่น ๆ ที่ต้องได้รับการอัพเกรด เราต้องอัพเกรดฮาร์ดแวร์ของเราด้วยเนื่องจาก Oracle ไม่ได้ติดตั้ง jvm 32 บิตสำหรับ Solaris อีกต่อไป มันเป็นระเบียบและสามารถป้องกันได้ง่าย ๆ โดยเพียงแค่ทำให้สิ่งต่าง ๆ เป็นปัจจุบัน
firtydank

+1 สำหรับ "ในขณะที่มันง่ายกว่าในระยะสั้นมันเผาไหม้เหมือนนรกในระยะยาว" ฉันเคยประสบกับวิธีการทั้งสองและในขณะที่การอัพเดทขนาดเล็กจำนวนมากอาจดูเหมือนเป็นเรื่องน่ารำคาญไม่ทำการอัปเกรดแล้วต้องอัปเกรด 10 ไลบรารี่จากเวอร์ชันที่อายุ 2 ปีมักจะไม่สามารถทำได้ในเวลาที่เหมาะสม คุณจบลงด้วยระบบที่ขึ้นอยู่กับไลบรารีที่ล้าสมัยและไม่มีการบำรุงรักษาคุณไม่สามารถใช้ไลบรารีอื่น ๆ ได้เนื่องจากพวกเขาต้องการเวอร์ชันที่ใหม่กว่าของไลบรารีนั้นซึ่งคุณไม่สามารถอัปเกรดได้และ ณ จุดที่คุณสูญเสียความสามารถในการแก้ไขปัญหาบางอย่าง ทั้งหมด
Michał Kosmulski

@firtydank ฉันอยากรู้ว่าคุณทำอะไรเพื่อแก้ไขปัญหานี้คุณได้ใช้นโยบายใหม่หรือไม่? การเปลี่ยนแปลงการทำงานขององค์กรคืออะไร?
buddyp450

10

ฉันประเมิน

  • ประการแรกฉันมองหาข้อผิดพลาดที่เรายกมาจากห้องสมุดนั้นและดูว่าพวกเขาได้รับการแก้ไขแล้วหรือไม่
  • ประการที่สองฉันมองหาการแก้ไขข้อผิดพลาดอื่น ๆ ใน lib ที่เราสามารถได้รับประโยชน์จาก (อาจเป็นสิ่งที่เป็นไปได้กรณีมุม)
  • ประการที่สามฉันมองหาการปรับปรุงใน lib / API จากนั้นตรวจสอบผลกระทบของการเปลี่ยนรหัสของเราเพื่อใช้สิ่งนั้นและประโยชน์ที่เหมาะสม ฉันเคยบ่อยครั้งในการอัพเกรด libs ที่ผ่านมาโดยไม่ได้ใช้คุณสมบัติใหม่ของพวกเขาโง่จริง ๆ !

จากนั้นฉันก็ชั่งน้ำหนักสิ่งนั้นทั้งหมดต่อการอยู่กับ lib ที่มีอยู่

ทดสอบทุกครั้ง - หวังว่าการทดสอบหน่วย / การรวมระบบของคุณจะทำให้มั่นใจได้ว่าจะไม่มีการถดถอยที่สำคัญเกิดขึ้น


7

ปัญหาที่สำคัญกับห้องสมุดบุคคลที่สามคือคุณต้องทดสอบแอปพลิเคชันของคุณอีกครั้งเมื่อคุณอัปเดตก่อนที่จะสามารถใช้งานได้ ดังนั้นหากคุณไม่มีรายงานข้อผิดพลาดซึ่งจำเป็นต้องอัปเดตห้องสมุดคุณจะไม่แตะพวกเขาจนกว่าคุณจะมีเวลาในการทำประกันคุณภาพอย่างสมบูรณ์

โดยปกติจะทำเมื่อออกเวอร์ชันใหม่

อย่างไรก็ตามฉันขอแนะนำให้คุณมีชุดทดสอบสำหรับการสร้างอย่างต่อเนื่องที่อนุญาตให้คุณอัปเดตไลบรารีในสาขาการพัฒนาและดำเนินการโดยอัตโนมัติ สิ่งนี้จะช่วยให้คุณค้นพบได้เร็วขึ้นเมื่อมันแตกดังนั้นคุณสามารถรายงานข้อผิดพลาดในโครงการได้


3

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


2
กรุณาอย่าวางลิงค์ ลิงก์มักหายไป โปรดพิจารณาอย่างน้อยสรุปสิ่งที่คุณกำลังลิงก์ไป ถ้าลิงก์นั้นพังลงไปสิ่งนี้จะมีประโยชน์มากแค่ไหนในอีกไม่กี่ปีข้างหน้า?
ทิมโพสต์

และได้รับการโหวตมากขึ้น :)
Tim Post

2

ฉันจะคิดถึงการอัพเดทไลบรารีทั้งหมดของโครงการก่อนหรือหลังรีลีส อย่างไรก็ตามสิ่งนี้อาจไม่ได้ผลหากคุณใช้ไลบรารีมากกว่า 10 หรือ 15 ไลบรารีซึ่งในกรณีนี้กลไกการตรวจสอบการอัปเดตบางประเภทจะช่วยได้มาก ข้อดีของการทำเช่นนี้คือคุณมีเวลาทุ่มเทในการทดสอบไลบรารีของคุณและสามารถแก้ไขปัญหาใด ๆ ได้ในครั้งเดียว คุณไม่จำเป็นต้องคอยติดตามการอัพเดทจากทุก ๆ ห้องสมุดคุณเพียงแค่ตรวจสอบการอัพเดทในวันใดวันหนึ่ง

ฉันจะเทียบกับคุณลักษณะการอัปเดตอัตโนมัติในสาขา dev ด้วยซ้ำ คงจะเป็นเรื่องที่น่าผิดหวังหากในระหว่างที่ฉันกำลังทำอะไรบางอย่างที่โครงการพังเพราะห้องสมุดอัตโนมัติทำการปรับปรุงตัวเองหรือฉันได้รับคำเตือนเรื่องค่าเสื่อมราคาอย่างฉับพลันสำหรับการใช้ API ที่เพิ่งถูกแทนที่ด้วยสิ่งอื่น


2

คุณต้องถามสิ่งที่คุณต้องการออกจากการปรับปรุงจริง ๆ ? การแก้ไขความปลอดภัยส่วนใหญ่เป็นแพตช์เล็ก ๆ น้อย ๆ ในรูปแบบของการแก้ไข:

  • ปิดโดยข้อผิดพลาดหนึ่งข้อที่รหัสใดก็ได้สามารถคัดลอกไปยังพื้นที่ที่ไม่ได้ใช้ในบัฟเฟอร์
  • พอยน์เตอร์ที่ห้อยอยู่หรืออย่างอื่นที่ทำให้เกิดพฤติกรรมที่ไม่ได้กำหนด
  • ข้อบกพร่องที่อนุญาต DoS บางประเภท
  • บักที่บังเอิญทำให้การดักข้อมูลส่วนตัวเป็นเรื่องง่าย
  • ความผิดพลาดทางคณิตศาสตร์
  • ผู้ดูแลสิ่งที่พวกเขาไม่ควร (Debian SSL บั๊กใคร?)

หากคุณดู CVE ส่วนใหญ่ในช่วงห้าปีที่ผ่านมาแพทช์ที่แก้ไขปัญหาเหล่านี้มักจะไม่สำคัญหากคุณใช้ไลบรารี่แบบเปิดซึ่งฉันหวังว่าคุณจะเป็น

จากนั้นคุณมีการแก้ไขข้อผิดพลาดตามจริงซึ่งคุณอาจต้องการ แต่บางทีคุณได้แก้ไขด้วยตัวเองแล้ว หากยังไม่พังอย่าแก้ไข

ในที่สุดคุณก็มีฟีเจอร์ใหม่ .. และบางทีฟีเจอร์ที่เลิกใช้แล้ว คุณต้องตรวจสอบบันทึกประจำรุ่นเหล่านั้นและทำอย่างละเอียด คุณสามารถใช้มันได้แม้ว่าพวกเขาจะแยก API ที่มีสิ่งอื่นมากมาย ถ้าใช่มันเป็นเวลาสำหรับการผ่าตัด .. ถ้าไม่เชอร์รี่เลือกสิ่งที่คุณต้องการและเดินหน้าต่อไป

บางคนอาจไม่เห็นด้วยกับฉัน แต่ฉันปฏิเสธที่จะใช้ห้องสมุดที่ไม่มีซอร์สโค้ด


แน่นอนว่าฉันชอบ
ไลบรารี่โอเพ่นซอร์ส

2

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

เป็นการดีที่คุณจะมีเวลาล่าสุดเสมอ แต่ถ้าเวอร์ชันใหม่ไม่สามารถใช้งานร่วมกับรุ่นหลังได้ คุณอาจต้องระงับการปรับปรุงนั้นสำหรับการเปิดตัวในอนาคตจนกว่าคุณจะสามารถจัดการกับการเปลี่ยนแปลงได้อย่างระมัดระวัง อาจมีการเปลี่ยนแปลงเล็กน้อยในลักษณะการทำงาน (เช่น "ตอนนี้คุณต้องตั้งค่าคุณสมบัติ X ก่อนเรียกเมธอด Y หรือคุณได้รับการรั่วไหลของหน่วยความจำช้า") ซึ่งยากต่อการตรวจสอบในการทดสอบ

ในทางกลับกันเวอร์ชันใหม่อาจมีการแก้ไขด้านความปลอดภัยที่ร้ายแรงดังนั้นคุณต้องคำนึงถึงเรื่องนี้ด้วย

เวอร์ชั่นสั้น: ใช้เป็นกรณี ๆ ไป


1

สิ่งนี้จะขึ้นอยู่กับการปล่อยของคุณ

แต่คำแนะนำของฉันคือการติดตั้งชุดไลบรารีบนเครื่องของนักพัฒนาทั้งหมด พิจารณาว่าเป็นมาตรฐานทองคำถ้าคุณต้องการเรียกมันว่าอะไรซักอย่างจากนั้นเริ่มพัฒนาตัวคุณสำหรับรุ่นนั้น

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

ติดตั้งเวอร์ชันใหม่เฉพาะในกรณีที่มีปัญหาสำคัญหรือข้อบกพร่องที่ต้องแก้ไขก่อนที่จะปรับใช้ซอฟต์แวร์

มันจะหมายความว่าคุณจะพลาดบางเวอร์ชัน แต่ควรบันทึกอาการปวดหัวและปัญหาเกี่ยวกับการกำหนดเวอร์ชันที่ช่วยให้คุณมีสมาธิในการพัฒนาแอปพลิเคชันของคุณ


1

การโค่นล้ม Externals

คุณสมบัติที่ยอดเยี่ยมคือคุณสามารถระบุการแก้ไขที่คุณต้องการ

โปรดทราบว่าการอัปเดตจะช้าลงหากคุณมีผู้ใช้ภายนอกมาก


ที่จริงแล้วฉันใช้พวกเขาและพวกเขามีประโยชน์มากและช้ามาก X-) แต่พวกเขาไม่ได้แก้ปัญหาเมื่อฉันควรอัปเดตเป็นเวอร์ชันที่ใหม่กว่า
Joonas Pulakka

พวกเขาอาจช้ามากใช่ ฉันมักจะปรับปรุงห้องสมุดภายนอกเมื่อ: (รุ่นใหญ่หรือแก้ไขข้อผิดพลาดที่มีผลต่อฉัน) และฉันอยู่ในช่วงครึ่งแรกของการทำซ้ำ

1

ฉันกำลังตั้งค่าบางอย่างเช่นนี้:

  • 1 repur mercurial สำหรับแต่ละส่วนขยายของแอปพลิเคชันของฉัน
  • Mercurial repo ที่รวบรวมเวอร์ชั่นเฉพาะของห้องสมุดบุคคลที่สามหลายแห่ง
  • repo SVN สำหรับทรัพยากรกราฟิก / งาน (แต่อาจเปลี่ยนเป็นอย่างอื่น)
  • Mercurial repo สำหรับแอปพลิเคชันของฉันซึ่งใช้คุณลักษณะ Subrepos ของ Mercurial เพื่อใช้เวอร์ชั่นเฉพาะของ pary repo ที่ 3 และส่วนขยายพื้นฐานบางส่วน

ตอนนี้เมื่อฉันต้องการทำงานกับส่วนขยายที่ไม่ใช่ "พื้นฐาน" (โดยปริยายรวมเป็น subrepo ใน repo ของแอปพลิเคชัน) ฉันเพียงแค่โคลน repo ในโฟลเดอร์ส่วนขยายและให้ CMake สร้างโครงการและโซลูชันสำหรับแอปพลิเคชันทั้งหมด

ด้วยวิธีนี้ฉันสามารถ:

  • เปลี่ยนบุคคลที่ 3 เป็นโคลนตรวจสอบว่าแอปทำงานได้กับแอพกดใน pary repo ครั้งที่ 3 จากนั้นอัปเดตเวอร์ชันย่อยของแอพพลิเคชั่น repo เป็นเวอร์ชั่น repo ของบุคคลที่สามใหม่
  • ทำงานกับส่วนขยายได้อย่างอิสระ togeter ทั้งหมดหรือเพียงเลือกเฉพาะบางอย่าง
  • ไม่ต้องกังวลเกี่ยวกับการเชื่อมโยงโปรเจ็กต์เข้าด้วยกันซึ่งทำได้โดย Cmake เพียงแค่ให้โปรเจ็กต์ย่อยทำการสแกนด้วย repo แอปพลิเคชันทั้งหมด

ยังไม่มีประสบการณ์มากมายกับองค์กรนี้ แต่ฉันคิดว่ามันมีประโยชน์ทีเดียว


1

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

มิฉะนั้นเมื่อ lib โตเต็มที่แล้วก็คือ "ถ้ายังไม่พังก็อย่าแก้ไขเลย" สำหรับฉัน. ไม่ช้าก็เร็วฉันอาจต้องการฟีเจอร์ของรุ่นที่ใหม่กว่าและไม่มีทางเลือกนอกจากต้องอัปเดต แต่จนถึงตอนนี้ความพยายามนั้นก็ยากที่จะพิสูจน์ ในทางกลับกันเมื่อฉันทำงานกับ lib หรือเฟรมเวิร์กที่ค่อนข้างใหม่เช่น Grails หรือ ExtJS ฉันจะอยู่กับเวอร์ชันล่าสุดเพราะผลิตภัณฑ์เหล่านี้ยังไม่โตเต็มที่ดังนั้นการอัพเดตมีแนวโน้มที่จะช่วยฉัน จากการทำงานเป็นหนึ่งในข้อบกพร่องเหล่านั้นรุ่นที่ใหม่กว่าได้รับการแก้ไข


1

ฉันใช้NuGetเพื่อทำให้ห้องสมุดบุคคลที่สามเป็นปัจจุบัน

เมื่อเพื่อนผู้ร่วมงานหรือบล็อกแจ้งให้ฉันทราบว่าหนึ่งใน DLLs ของบุคคลที่สามล้าสมัย NuGet ทำให้การอัปเดตนั้นง่ายมาก

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