Tworzę aplikację sieci Web na platformie .NET 4.0 (beta2) w języku C #.
Gdy próbuję użyć zestawu o nazwie „ActiveHomeScriptLib”, pojawia się następujący błąd:
Nie można osadzić typu interakcji „ActiveHomeScriptLib.ActiveHomeClass”. Zamiast tego użyj odpowiedniego interfejsu.
Kiedy zmieniam framework na wersję 3.5, nie mam żadnych błędów.
Co to jest typ interakcji i dlaczego dzieje się tak tylko wtedy, gdy używam frameworka 4.0?
Odpowiedzi:
.NET 4.0 pozwala na osadzenie podstawowych zestawów międzyoperacyjnych (a raczej ich potrzebnych fragmentów), dzięki czemu nie trzeba ich wdrażać razem z aplikacją.
Z jakiegokolwiek powodu nie można osadzić tego zestawu - ale wygląda na to, że nie stanowi to dla ciebie problemu. Wystarczy otworzyć kartę Właściwości dla zestawu w Visual Studio 2010 i ustawić „Osadzanie typów interopów” na „Fałsz”.
EDIT: Zobacz też Michael Gustus za odpowiedź , usuwając
Class
przyrostek od rodzaju jesteś korzystających.źródło
embed interop types
właściwości załatwiło sprawęfalse
. W moim przypadku - pracowałem zMicrosoft.Office.Interop.Excel
biblioteką i potrzebowałem dostępu do obiektu skoroszytu. Użycie interfejsuWorkbook
(przy okazji konwencji nazewnictwa ...) nie było opcją - otrzymałemCOM object
, a nie pożądanyMicrosoft.Office.Interop.Excel.WorkbookClass
W większości przypadków ten błąd jest wynikiem kodu, który próbuje utworzyć instancję obiektu COM. Na przykład oto fragment kodu uruchamiający program Excel:
Zazwyczaj w .NET 4 wystarczy usunąć sufiks „Class” i skompilować kod:
Wyjaśnienie MSDN jest tutaj .
źródło
Jak Jan Zajęło mi to trochę czasu, aby go zdobyć .. = S Więc dla każdego, kto jest zaślepiony frustracją.
źródło
Oto gdzie ustawić Embed Interop w Visual Studio 2012
źródło
Rozwijanie poprawnej odpowiedzi Jona.
Problem polega na tym, że łączysz nową funkcję „Embed Interop Types” (lub NoPIA) z użyciem typu klasy. Funkcja „Osadzanie typów interakcji” działa zasadniczo poprzez statyczne łączenie wszystkich typów z PIA (Primary Interop Assembly) z zespołem referencyjnym, usuwając narzut związany z jego wdrażaniem.
Ta funkcja działa świetnie dla większości typów w PIA, ale ma ograniczenia. Jednym z nich jest to, że nie można osadzać klas (jest to problem z obsługą). Misha ma szczegółowy artykuł na blogu, dlaczego jest to niedozwolone
źródło
Mam rozwiązanie
Przejdź do referencji, kliknij prawym przyciskiem myszy żądaną bibliotekę DLL, aby wyświetlić opcję „Osadzanie typów interopów” do „False” lub „True”.
źródło
Natrafiłem na ten problem, gdy ściągałem projekt TFS na moją maszynę lokalną. Podobno działało dobrze na maszynie faceta, który to napisał. Po prostu zmieniłem to ...
Do tego...
Teraz działa jak mistrz!
źródło
Miałem ten sam problem w VB.NET 2013 z Office 2007 i to rozwiązało:
VS 2013 VB.NET Project> Rekwizyty> Referencje> Microsoft Word 12.0 Object Lib> Osadzanie typów interakcji: zmień z True na False
źródło
http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307
Ten błąd występuje, ponieważ wartość domyślna jest prawdziwa dla właściwości Osadzanie typów interakcji zestawu TestStand API Interop, do którego odwołuje się nowy projekt. Aby rozwiązać ten błąd, zmień wartość właściwości Embed Interop Types na False, wykonując następujące kroki: Wybierz odwołanie do zestawu TestStand Interop w sekcji odniesień projektu w Eksploratorze rozwiązań. Znajdź właściwość Osadzanie typów typów w przeglądarce właściwości i zmień wartość na False
źródło
Program Visual Studio 2017 w wersji 15.8 umożliwia korzystanie z PackageReferencesyntax do odwoływania się do pakietów NuGet w projektach Visual Studio Extensibility (VSIX). Ułatwia to rozumowanie pakietów NuGet i otwiera drzwi do posiadania kompletnego pakietu meta zawierającego cały VSSDK.
Zainstalowanie poniżej pakietu NuGet rozwiąże problem EmbedInteropTypes .
źródło