การตั้งค่า Embed Interop types ที่เป็นจริงและเท็จใน Visual Studio แตกต่างกันอย่างไร


121

ใน Visual Studio เมื่อเพิ่มการอ้างอิงหนึ่งรายการในโครงการหน้าต่างคุณสมบัติมีตัวเลือกEmbed Inteop Typesเราควรตั้งค่าเป็นTrueหรือFalse? อะไรคือความแตกต่าง?

เนื่องจากเรามีโปรเจ็กต์จำนวนมากในบางโปรเจ็กต์จึงมีการตั้งค่าการอ้างอิงFalseและอื่น ๆ ถูกตั้งค่าเป็นTrueมันจึงยุ่งเหยิง และเซิร์ฟเวอร์ bulid ก็มีคำเตือนเหมือนกัน:

“ การอ้างอิงถูกสร้างขึ้นเพื่อฝังตัวประกอบระหว่างกัน” หมายความว่าอย่างไร

ดังนั้นเราจึงวางแผนที่จะเปลี่ยนทั้งหมดEmbed Inteop Typesเพื่อFalseสิ่งที่มีความเสี่ยงที่เราจะได้รับ?


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

@HansPassant คุณกำลังบอกว่าไม่เคยตั้งค่าfalseหรือไม่เคยเปลี่ยน (เช่นถ้าค่าเริ่มต้นเป็นค่าเริ่มต้นfalseแล้ว)?
noelicus

2
เขาวางแผนที่จะตั้งค่าเป็น False อย่าทำเช่นนี้
Hans Passant

3
@HansPassant ทำไมคุณถึงใช้ความน่ารำคาญและคร่ำครวญ มันโหดมาก: D
Mafii

4
@Mafii ฉันคิดว่า grok มาจาก Stranger in a Strange Land (ซึ่งเป็นคนอเมริกัน) ไม่ได้หมายความว่าคนอังกฤษจะไม่ใช้มันมากกว่านี้แน่นอน!
UuDdLrLrSs

คำตอบ:


79

ตัวเลือกนี้ถูกนำมาใช้เพื่อขจัดความจำเป็นในการปรับใช้ PIA ที่มีขนาดใหญ่มาก (Primary Interop Assemblies) สำหรับการทำงานร่วมกัน

เพียงแค่ฝังโค้ดบริดจ์ที่มีการจัดการที่ใช้เพื่อให้คุณสามารถพูดคุยกับแอสเซมบลีที่ไม่มีการจัดการ แต่แทนที่จะฝังทั้งหมดมันจะสร้างเฉพาะสิ่งที่คุณใช้ในโค้ดเท่านั้น

อ่านเพิ่มเติมในบล็อกโพสต์สกอตต์ Hanselman เกี่ยวกับมันและการปรับปรุง VS อื่น ๆที่นี่

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

ความเสี่ยงเพียงอย่างเดียวในการเปลี่ยนทั้งหมดเป็นเท็จคือความกังวลเกี่ยวกับการปรับใช้ไฟล์ PIA และการปรับใช้ที่มากขึ้นหากไฟล์บางไฟล์มีขนาดใหญ่


1
โปรดทราบว่ามีความแตกต่างที่สำคัญมากที่อาจทำให้โค้ดที่มีอยู่เสียหายเมื่อปิดEmbed Interop types ความแตกต่างถูกกล่าวถึงที่นี่ : “ C # 4 และเวอร์ชันที่ใหม่กว่าจะแปลง Object ที่ส่งคืนเป็นไดนามิกโดยอัตโนมัติหากแอสเซมบลีถูกอ้างอิงโดยตัวเลือกคอมไพเลอร์ / link หรือเทียบเท่าหากคุณสมบัติ Excel Embed Interop types ถูกตั้งค่าเป็น true True คือค่าเริ่มต้นสำหรับคุณสมบัตินี้”
Dirk Vollmar

ฝังตัวทำงานร่วมกันประกอบให้ฉันปัญหาในระบบ Plug-in-based ซึ่งทั้งสองเป็นเจ้าภาพและปลั๊กอินขึ้นอยู่กับเดียวกันCOM -object ปัญหาอีกประการหนึ่งคือการควบรวมกิจการดังกล่าวมีการประกอบILMerge
Ant_222

8

ฉันสังเกตเห็นว่าเมื่อตั้งค่าเป็นเท็จฉันสามารถเห็นค่าของรายการโดยใช้โปรแกรมดีบั๊ก เมื่อตั้งค่าเป็น true ฉันได้รับข้อผิดพลาด - item.FullName.GetValue ประเภทการทำงานร่วมกันแบบฝังตัว 'FullName' ไม่มีคำจำกัดความสำหรับ 'QBFC11Lib.IItemInventoryRet' เนื่องจากไม่ได้ใช้ในแอสเซมบลีที่คอมไพล์ พิจารณาการส่งไปยังวัตถุหรือเปลี่ยนคุณสมบัติ "Embed Interop types" เป็นจริง

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