2012-06-19 23 views
6

Önce kullanmam gereken bir üçüncü taraf ActiveX denetimi var.Embed Interop Uyarılarını Senkronize Edemiyor

Sonraki O üçüncü şahıs bazı görüntülerin kontrol beslemek için stdole kütüphanesini kullanmak zorundayız. Varsayılan ayarları altında derlerken , bazı uyarılar alıyorum:

warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\Interop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly. 
warning CS1762: A reference was created to embedded interop assembly 'c:\Windows\assembly\GAC\stdole\7.0.3300.0__b03f5f7f11d50a3a\stdole.dll' because of an indirect reference to that assembly created by assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll'. Consider changing the 'Embed Interop Types' property on either assembly. 

Kolay yeterli, ben stdole başvuru için false o tavsiye ve set Göm Interop'un Türleri takip edeceğiz. Uygulama, bu kadar atma zaman aniden, şimdi istemci makine gitmek kadar her şey iyi görünüyor: Yani

Could not load file or assembly 'stdole, Version=7.0.3300.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a' or one of its dependencies. The system cannot find the file specified. 

, ben NEDEN stdole embed birlikte çalışma çıkarmadan emin değilim gerçi (yani bir şey olmayacak sanırım vardır kütüphaneyi bütünüyle zorlaştırmanın etkisi).

Peki, diğer tarafa gidelim ve Embed Interop true ile her şeyi işaretleyelim. OOPS! derleme: Yani

Error 2 Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing either the 'ImportedFromTypeLibAttribute' attribute or the 'PrimaryInteropAssemblyAttribute' attribute XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX 
Error 1 Cannot embed interop types from assembly 'XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll' because it is missing the 'GuidAttribute' attribute XXX\obj\x86\Release\AxInterop.ThirdPartyControl.dll XXX 

, uyarılar kurtulmak ve inşa edilmiş ve çalıştırılabilir bir şey var kullanımına nasıl herhangi bir tavsiye?

GÜNCELLEME

Hans Passant yorum olarak gerçekten sorunu çözmek gelmez bir cevap yayınlanmıştır. Eğer onu bir cevap olarak ilan ederse kabul edeceğim. Ne yazık ki, Kopya Yerel için ayarlanan DLL dosyasının projenin sürüm klasörüne güzel bir şekilde kopyalandığı, ancak çözümün son sürüm klasörüne (ayrı bir yürütülebilir dosya) taşınmayacağı maalesef standart sorunu yaşıyorum. Şu an için, yürütülebilir dosyamda stdole'ye bir başvuru ekleyerek bunu çözdüm. Sanırım bu yeterince iyi. Hans Passant tarafından

+3

Bir ActiveX bileşeni için türleri yerleştiremezsiniz. Hedef makinede STD için stdole eksik, Kopya Yerel özelliğini true olarak ayarlamayı ve oluşturulan stdole.dll dosyasını da kopyalamayı deneyin. –

+0

Yine Hans Passant! Sen her yerdesin, bugün bile ilgisiz bir şeyle karşılaştım. Jon Skeet'in neden tüm basını aldığını bilmiyorum. Ben deneyeceğim ve rapor edeceğim. – user12861

+0

@HansPassant, güncellemeye bakın – user12861

cevap

3

Cevap:

Bir ActiveX bileşeni için türlerini katıştıramazsınız. Hedef makinede STD için stdole eksik, Kopya Yerel özelliğini true olarak ayarlamayı ve oluşturulan stdole.dll dosyasını da kopyalamayı deneyin.

-2

VS10'da yeni bir proje oluşturursanız, .NET framework 4 istemci profilini varsayılan olarak kullanabilir, hedef çerçeveyi proje özelliklerinde .NET Framework 4'e ayarlayabilirsiniz -> Uygulama sekme sayfası.