2012-06-19 9 views
6

Najpierw potrzebuję innej kontrolki ActiveX, której potrzebuję użyć.Nie można wyciszyć Osadzanie ostrzeżeń międzyoperacyjnych

Następnie muszę użyć biblioteki Stdole, aby nakarmić tę stronę trzecią kontrolującą niektóre obrazy. Kiedy skompilować w ustawieniach domyślnych, dostaję jakieś ostrzeżenia:

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. 

dość łatwe, będę podążać tą radą i określonych typów HTML Interop false dla stdole odniesienia. Wszystko wygląda dobrze, dopóki nie iść na komputerze klienckim teraz, gdy nagle aplikacja jest rzucanie się następująco:

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. 

Tak, myślę, że nie stanie (choć nie jestem pewien, dlaczego usunięcie osadzenia współdziałanie na stdole ma efekt całkowitego uniezależnienia biblioteki).

Cóż, przejdźmy w drugą stronę i oznaczmy wszystko za pomocą Embed Interop true. OOPS! Błąd kompilacji:

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 

więc wszelkie porady, w jaki sposób pozbyć się ostrzeżenia i mieć coś, co może być zbudowany i zarządzany?

UPDATE

Hans Passant pisał jako komentarz odpowiedź, która rzeczywiście rozwiązać problem. Jeśli przełoży to jako odpowiedź, zaakceptuję to. Niestety mam również standardowy problem, gdy biblioteka DLL ustawiona na Copy Local jest ładnie skopiowana do folderu wydania projektu, ale nie przeniesie się do folderu końcowego wydania rozwiązania (osobny plik wykonywalny). Rozwiązałem to na razie, dodając odniesienie do stdole w moim pliku wykonywalnym. Przypuszczam, że to chyba wystarczająco dobre.

+3

Nie można osadzać typów dla składnika ActiveX. W maszynie docelowej brakuje PIA dla stdole, spróbuj ustawić właściwość Copy Local na true i skopiuj wygenerowany stdole.dll. –

+0

Hans Passant ponownie! Jesteś wszędzie, już wcześniej natknąłem się na niezwiązane ze sobą rzeczy. Nie wiem, dlaczego Jon Skeet dostaje całą prasę. Wypróbuję to i zgłoś się. – user12861

+0

@HansPassant patrz aktualizacja do pytania – user12861

Odpowiedz

3

Odpowiedz przez Hans Passant:

Nie można osadzić typów dla komponentu ActiveX. W maszynie docelowej brakuje PIA dla stdole, spróbuj ustawić właściwość Copy Local na true i skopiuj wygenerowany stdole.dll.

-2

Jeśli tworzysz nowy projekt w VS10, może on domyślnie używać profilu klienta .NET Framework 4, możesz ustawić strukturę docelową na .NET Framework 4 w właściwościach projektu -> zakładka Aplikacja.