Visual Studio'da Embed Interop Types true ve false ayarının farkı nedir?


121

Visual Studio'da, projeye bir başvuru eklerken, özellikler penceresinin bir seçeneği vardır Embed Inteop Types, bunu Trueveya False? Fark ne?

Pek çok projemiz olduğu için, bazıları arasında referans verildi False, diğerleri ayarlandı True, bu tamamen karışık. Bulid sunucusunda da aynı uyarılar var:

"Gömülü birlikte çalışma derlemesine referans oluşturuldu" ne anlama geliyor?

Hepimizin değiştirmeyi planlıyorsanız Yani Embed Inteop Typesiçin False, ne risk alacağı?


4
Bunu asla yapmayın, rahatsız edici dağıtım ayrıntılarını çözen harika bir özelliktir. Tüm bunların neyle ilgili olduğunu gerçekten anlamanız için COM'u anlamalısınız.
Hans Passant

@HansPassant, onları asla ayarlamayın falseveya değiştirmeyin mi diyorsunuz (örneğin, varsayılan olarak falsezaten ayarlanmışlarsa )?
noelicus

2
False olarak ayarlamayı planlıyor. Bunu asla yapmayın.
Hans Passant

3
@HansPassant nasıl oluyor da bıktırıcı ve salak kullanıyorsun. çok İngiliz: D
Mafii

4
@Mafii Grok'un Stranger in a Strange Land'den (Amerikalı) olduğunu sanıyordum. Bu, İngilizlerin onu daha fazla kullanmayacağı anlamına gelmez elbette!
UuDdLrLrSs

Yanıtlar:


79

Bu seçenek, birlikte çalışma için çok büyük PIA'ları (Birincil Birlikte Çalışma Meclisleri) dağıtma ihtiyacını ortadan kaldırmak için getirildi.

Yalnızca, yönetilmeyen derlemelerle konuşmanıza izin veren, kullanılan yönetilen köprüleme kodunu gömer, ancak hepsini gömmek yerine, yalnızca kodda gerçekten kullandığınız şeyleri oluşturur.

Scott Hanselman'ın blog gönderisinde bu konuyla ve diğer VS iyileştirmeleriyle ilgili daha fazlasını buradan okuyun .

Tavsiye edilip edilmediğine gelince, bu özelliği kullanmam gerekmediğinden emin değilim. Hızlı bir web araması birkaç potansiyel müşteri sağlar:

Hepsini yanlışa çevirmenin tek riski, PIA dosyalarıyla daha fazla dağıtım endişesi ve bu dosyaların bazıları büyükse daha büyük bir dağıtımdır.


1
Embed Interop Types kapatıldığında mevcut kodu bozabilecek oldukça önemli bir fark olduğunu unutmayın . Fark burada belirtilmiştir : “C # 4 ve sonraki sürümler, derlemeye / link derleyici seçeneği tarafından başvuruluyorsa veya eşdeğer olarak Excel Embed Interop Types özelliği true olarak ayarlandıysa, döndürülen Object'i otomatik olarak dinamik olarak dönüştürür. True, bu özellik için varsayılan değerdir. "
Dirk Vollmar

Gömülü birlikte çalışma derlemeleri, hem ana bilgisayarın hem de eklentilerin aynı COM nesnesine bağlı olduğu eklenti tabanlı bir sistemde sorun çıkardı. Bir başka sorun da bu tür meclisleri ILMerge ile birleştirmekti .
Ant_222

8

Yanlış olarak ayarlandığında, hata ayıklayıcıyı kullanarak bir öğenin değerini görebildiğimi fark ettim. True olarak ayarlandığında, bir hata alıyordum - item.FullName.GetValue Gömülü birlikte çalışma türü 'FullName', derlenen derlemede kullanılmadığı için 'QBFC11Lib.IItemInventoryRet' için bir tanım içermiyor. Nesneye çevrim yapmayı veya 'Embed Interop Types' özelliğini true olarak değiştirmeyi düşünün.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.