Typ Interop nie może być osadzony

Tworzę aplikację webową na. Net 4.0 framework (beta2) w C#.

Kiedy próbuję użyć zestawu o nazwie "ActiveHomeScriptLib", pojawia się następujący błąd:

Typ Interop "ActiveHomeScriptLib.ActiveHomeClass" nie może być osadzony. Użyj odpowiedniego zamiast tego interfejs.

Kiedy zmieniam framework na wersję 3.5, Nie mam żadnych błędów.

Co to jest typ Interop i dlaczego występuje tylko wtedy, gdy używam frameworka 4.0?

Author: Peter Mortensen, 2010-03-20

9 answers

. NET 4.0 umożliwia osadzanie podstawowych zestawów interop (a raczej ich potrzebnych bitów) w twoim zestawie, dzięki czemu nie musisz ich wdrażać obok aplikacji.

Z jakiegokolwiek powodu, ten zespół nie może być osadzony - ale brzmi, jakby to nie był problem dla Ciebie. Wystarczy otworzyć zakładkę Właściwości dla złożenia w Visual Studio 2010 i ustawić "Embed Interop Types"Na " False".

EDIT: Zobacz też odpowiedź Michaela Gustusa , usunięcie Class przyrostek od typów, których używasz.

 952
Author: Jon Skeet,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:10:42

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ącego Excela:

Excel.ApplicationClass xlapp = new Excel.ApplicationClass();

Zazwyczaj w. Net 4 wystarczy usunąć przyrostek 'Class' i skompilować kod:

Excel.Application xlapp = new Excel.Application();

Wyjaśnienie MSDN jest tutaj .

 443
Author: Michael Gustus,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-06-03 19:54:15

Tak jak Jan Zajęło mi to trochę czasu .. = Tak dla każdego, kto jest zaślepiony frustracją.

  • Kliknij prawym przyciskiem myszy zespół, który dodałeś w Eksploratorze rozwiązań w ramach projektu References . (W moim przypadku WIA)
  • Kliknij właściwości.
  • i powinna być tam opcja dla Embed Interop Assembly.
  • Ustaw Na False
 102
Author: gideon,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-01-19 09:12:46

Rozszerzenie na poprawną odpowiedź Jona.

Problem polega na tym, że połączenie nowej funkcji" Embed Interop Types " (lub NoPIA) z użyciem typu klasy. Funkcja "Embed Interop Types" działa zasadniczo statycznie łącząc we wszystkich typach z PIA (Primary Interop Assembly) do zestawu odwołującego, usuwając koszty wdrożenia.

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 osadzanie klas (to problem z obsługą). Misha ma szczegółowy artykuł na blogu o tym, dlaczego nie jest to dozwolone

 32
Author: JaredPar,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2010-03-20 17:42:41

Oto gdzie ustawić embed Interop w Visual Studio 2012

Tutaj wpisz opis obrazka

 24
Author: VK_217,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-04-27 01:34:01

Got the solution

Przejdź do referencji kliknij prawym przyciskiem myszy żądaną bibliotekę dll otrzymasz opcję "Embed Interop Types" na "False"lub " True".

 12
Author: Navdeep,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2015-09-03 11:14:03

Napotkałem ten problem podczas ściągania projektu TFS na moją lokalną maszynę. Podobno działał dobrze na maszynie faceta, który to napisał. Po prostu to zmieniłem...

WshShellClass shellClass = new WshShellClass();

Do tego...

WshShell shellClass = new WshShell();
Teraz działa jak mistrz!
 9
Author: Zach,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-01-12 15:34:54

Miałem ten sam problem w VB.NET 2013 z Office 2007 i to rozwiązało:

VS 2013 VB.NET Project > Props > Refs > Microsoft Word 12.0 Object lib > Embed Interop Types: change True to False

 2
Author: Doug Null,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2014-10-04 14:23:12

Http://digital.ni.com/public.nsf/allkb/4EA929B78B5718238625789D0071F307

Ten błąd występuje, ponieważ wartość domyślna jest prawdziwa dla właściwości Embed Interop Types zestawu Interop API TestStand, do którego odnosi 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 odniesienie do zestawu TestStand Interop w sekcji referencje projektu w Eksploratorze rozwiązań. Znajdź Osadzenie właściwości Interop Types w przeglądarce właściwości i zmiana wartości na False

 1
Author: Ramezani r,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-06-10 07:57:12