เอ็นจินการแตกต่าง / ผสานข้อความที่เหมาะสมสำหรับ. NET หรือไม่ [ปิด]


108

ข้อกำหนด:

  • ฟรีโดยเฉพาะอย่างยิ่งโอเพ่นซอร์ส
  • ติดตั้งใน langs ที่มีการจัดการ. NET

Google พบสิ่งเหล่านี้:

แก้ไข:

ไม่มีแอปโปรดมีเพียงห้องสมุด


5
เธรดนี้ไม่ได้รับการค้ามนุษย์มาระยะหนึ่งแล้ว แต่คุณลงเอยด้วยโครงการโอเพนซอร์สใด ฉันกำลังมองหาสิ่งเดียวกันและนอกเหนือจากไลบรารีที่ระบุไว้ฉันไม่พบมากนัก (ผิดหวังที่มีการเปลี่ยนแปลงเพียงเล็กน้อยใน 2 ปี ... )
มี.ค. 75

1
marr75: ได้เลย [Credit to Cheeso / Brian (ดูคำตอบด้านล่าง)]: " โค้ด Google Diff / Patch / Mergeถูกย้ายไปที่ C # คอมโพเนนต์ COM ยังคงใช้งานได้ แต่ถ้าคุณมาจาก. NET คุณ ต้องการใช้พอร์ต. NET โดยตรง "
Dave

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

คำตอบ:


88

คุณสามารถคว้าคอมโพเนนต์ COM ที่ใช้ Diff ใช้งานได้จาก. NET

อัปเดต 2010 ต.ค. 17 : รหัสGoogle Diff / Patch / Mergeถูกย้ายไปที่ C # คอมโพเนนต์ COM ยังคงใช้งานได้ แต่ถ้าคุณมาจาก. NET คุณจะต้องใช้พอร์ต. NET โดยตรง


14
ดูเหมือนว่าสิ่งนี้ถูกย้ายไปยัง C # (การใช้งาน C # ที่มีการจัดการเต็มรูปแบบ) เวอร์ชัน C # สามารถใช้ได้ในส่วนดาวน์โหลดบนหน้า Google คุณสามารถแก้ไขบิต "COM" ของคำตอบของคุณ พบได้ดีเนื่องจากการใช้งานนี้ (อย่างน้อยก็คือเวอร์ชัน python / js) ที่ใช้ในโครงการที่ใช้กันอย่างแพร่หลายเช่น Google Docs
Brian Low

ไบรอันขอบคุณ ฉันได้อัปเดตคำตอบแล้ว
Cheeso

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

1
ผมขอแนะนำให้DiffPlex มีnetstandard1.0น้ำหนักเบามาก คุณสามารถฝังลงในแอปพลิเคชัน WPF ของคุณได้อย่างง่ายดายโดยใช้สิ่งRichTextBoxนี้: github.com/halllo/WpfDiff
halllo

1
พอร์ต C # -centric เพิ่มเติม (การตั้งชื่อปลอกและอื่น ๆ ) อยู่ที่: github.com/pocketberserker/Diff.Match จับคู่กับการสนับสนุน nuget:Install-Package Diff.Match.Patch
Kirk Woll

21

ฉันคิดว่า "Generic - Reusable Diff Algorithm ใน C #" บน Codeproject เป็นสิ่งที่ดีที่สุดที่คุณจะพบในฐานะ. NET-Engine สำหรับ diff / patch / merge ฉันสร้างโครงการด้วยตัวเองและเหมาะกับความต้องการของฉันในสถานการณ์ส่วนใหญ่ มีหนึ่งหรือสองกรณีที่เลวร้ายที่สุด scencario เมื่ออัลกอริทึมทำให้ไฟล์แพทช์มีขนาดใหญ่กว่าที่ควรจะเป็น แต่ส่วนใหญ่แล้วมันก็ใช้ได้ดีสำหรับฉัน (ไฟล์ข้อความที่มีขนาด> 30 MB)

ฉันกำลังทดสอบ Codeproject-Project อื่นที่คุณสามารถพบได้ที่นี่: http://www.codeproject.com/KB/applications/patch.aspx มันใช้ DLL บางตัวจาก Microsoft ในการแพทช์ดังนั้นมันจึงดูน่าสนใจ แต่ DLL เหล่านั้นไม่มีการจัดการและโปรเจ็กต์นี้เป็นเพียง Wrapper บางประเภทเท่านั้น แต่บางทีมันอาจช่วยคุณได้

แก้ไข: พบเพียงโครงการอื่นDiffPlex : http://diffplex.codeplex.com/ มันรวมกันของ diffing ห้องสมุด NET มีทั้ง Silverlight และ HTML ต่างมุมมอง ตามที่ระบุไว้ที่นั่น DiffPlex เป็นไลบรารีที่ CodePlex ใช้เพื่อสร้างความแตกต่างของไฟล์


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

1
เมื่อคุณพบห้องสมุดที่ดีกว่าโปรดบอกเรา (หรืออย่างน้อยก็ฉันg ) - ฉันค้นหาตัวเองมาระยะหนึ่งแล้วและไม่พบอะไรเลยนอกจากที่กล่าวไปแล้ว
Anheledir

1
Diffplex ได้ย้ายไปที่github.com/mmanela/diffplex
codingdave


5

ยังไม่มีคำตอบใดเลย (ยกเว้นการอ้างอิง GitSharp) ที่จัดการกับการผสาน 3 ทางดังนั้นในกรณีที่มันช่วยให้ใครก็ตามที่ฉันเพิ่งย้ายพอร์ตการใช้งาน javascript diff3 ของ Tony Garnock-Jones (จาก โครงการซินโครตรอนอ้างอิงจาก Hunt และ McIlroy 1976) ถึง C #

มันเป็นพอร์ตไฟล์เดียวที่เรียบง่ายของวิธีการผสานต่างและสามทาง แต่มันเป็นอัลกอริทึมมาตรฐานและจนถึงตอนนี้ก็ใช้งานได้ดีสำหรับฉัน: https://gist.github.com/2633407


ฉันไม่สามารถแก้ไขลิงก์ gist.github ได้ - ฉันสงสัยว่าวิธีการผสานสามทางสามารถรวมเข้ากับเครื่องมือเช่นนี้ได้หรือไม่และจะให้ผลลัพธ์ที่แตกต่างกันหรือในความเป็นจริงเหมือนกับอัลกอริทึมMyers Diffที่ใช้งานแล้ว?
user8276908
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.