Czym jest zarządzany / niezarządzany kod w C#?

Używam Assembly.GetEntryAssembly()... w moim kodzie C#, aby uzyskać wersję aplikacji. Działa dobrze, ale gdy próbuję w NUnit zwraca NULL. W MSDN stwierdza, że może zwracać NULL po wywołaniu z niezarządzanego kodu.

Co to jest kod zarządzany lub niezarządzany? Nie rozumiem.

Author: TECHkish, 2008-12-02

12 answers

Oto tekst z MSDN o niezarządzanym kodzie .

Niektóre biblioteki muszą wywoływać kod niezarządzany (na przykład natywne API kodu, takie jak Win32). Ponieważ oznacza to wyjście poza granice bezpieczeństwa dla zarządzanego kodu, wymagana jest ostrożność.

Oto kilka dodatkowych wyjaśnień na temat kodu zarządzanego:

  • Kod wykonywany przez CLR.
  • Kod skierowany do środowiska uruchomieniowego common language, podstawy . NET Framework jest znany jako kod zarządzany.
  • zarządzany kod dostarcza metadanych niezbędnych dla CLR do świadczenia usług, takich jak zarządzanie pamięcią, integracja między językami, bezpieczeństwo dostępu do kodu i automatyczna kontrola czasu życia obiektów. Cały kod oparty na IL jest wykonywany jako kod zarządzany.
  • Kod wykonujący się w środowisku CLI.

Dla Twojego problemu:

Myślę, że to dlatego, że NUnit wykonuje kod do UnitTesting i może mieć jakieś część, która nie jest zarządzana. Ale nie jestem tego pewien, więc nie bierz tego za złoto. Jestem pewien, że ktoś będzie mógł udzielić ci więcej informacji na ten temat. Mam nadzieję, że to pomoże!

 67
Author: Patrick Desjardins,
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
2008-12-02 15:32:34

Ten {[2] } jest dobrym artykułem na ten temat.

Arkusz łóżeczka:

Zarządzany kod nie jest kompilowany do kodu maszynowego, ale do pośredniego języka, który jest interpretowany i wykonywany przez niektóre usługi na komputerze i dlatego działa w ramach (miejmy nadzieję!) Bezpieczny framework, który obsługuje niebezpieczne rzeczy, takie jak pamięć i wątki. We współczesnym użyciu często oznacza to. net, ale nie musi.

Niezarządzany kod jest kompilowany do maszyny kod i dlatego wykonywane przez system operacyjny bezpośrednio. Dlatego ma zdolność do robienia szkodliwych / potężnych rzeczy zarządzany kod nie. Tak wszystko kiedyś działało, więc zazwyczaj kojarzy się to ze starymi rzeczami.dlls

Natywny kod jest często synonimem niezarządzanego, ale nie jest identyczny.

 165
Author: annakata,
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 10:50:20

Kiedy pomyślisz o niezarządzanym , pomyśl o kodzie specyficznym dla maszyny. Jak x86 assembly language. Niezarządzany (natywny) kod jest kompilowany i linkowany, aby działał bezpośrednio na procesorze, dla którego został zaprojektowany, wyłączając na razie wszystkie elementy systemu operacyjnego. Nie jest przenośny, ale szybki. Bardzo prosty, okrojony kod.

Managed code to wszystko, od Javy po old Interpretive BASIC, lub wszystko, co działa pod .NET. Managed code zazwyczaj jest kompilowany do pośredni poziom P-Kod lub kod bajtowy zestaw instrukcji. Nie są to instrukcje specyficzne dla maszyn, chociaż wyglądają podobnie do języka asemblacji. Kod zarządzany izoluje program od maszyny, na której jest uruchomiony, i tworzy bezpieczną granicę, w której cała pamięć jest przydzielana pośrednio i ogólnie rzecz biorąc, nie masz bezpośredniego dostępu do zasobów maszyny, takich jak porty, przestrzeń adresowa pamięci, stos itp. Chodzi o to, aby działać w bardziej bezpiecznym środowisku.

Do konwersji od zarządzanej zmiennej, powiedzmy, do niezarządzanej, musisz dostać się do samego rzeczywistego obiektu. Prawdopodobnie jest zapakowany lub zapakowany w jakieś dodatkowe opakowanie. Zmienne niezarządzane (np.' int', powiedzmy) - na 32 - bitowej maszynie-zajmują dokładnie 4 bajty. Nie ma nad głową ani dodatkowego opakowania. Proces przechodzenia z kodu zarządzanego do niezarządzanego - i z powrotem - nazywa się"marshaling ". Pozwala Twoim programom przekroczyć granicę.

 61
Author: TJPowell,
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-03-07 16:39:30

W jak najmniejszej liczbie słów:

  • zarządzany kod = programy. NET
  • unmanaged code = "normalne" programy
 22
Author: Vilx-,
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-03-07 16:40:30

Zasadniczo niezarządzany kod to kod, który nie działa pod. NET CLR (aka not VB.NET, C#, itp.). Domyślam się, że NUnit ma Runner/wrapper, który nie jest kodem.NET (aka C++).

 5
Author: joegtp,
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
2008-12-02 15:36:52

NUnit ładuje testy jednostkowe w oddzielnej Appdomenie i zakładam, że punkt wejścia nie jest wywoływany( prawdopodobnie nie jest potrzebny), stąd montaż wejścia jest null.

 4
Author: leppie,
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
2008-12-02 15:40:26

Kod Zarządzany:
Kod, który działa w ramach "umowy o współpracy" z środowisko uruchomieniowe common language. Kod zarządzany musi dostarczać metadane niezbędne do świadczenia przez runtime usług takich jak pamięć zarządzanie, integracja między językami, bezpieczeństwo dostępu do kodu oraz automatyczna kontrola żywotności obiektów. Cały kod oparty na Microsoft język pośredni (MSIL) wykonuje jako kod zarządzany.

Kod Niezarządzany:
Kod, który jest tworzony bez względu na na konwencje i Wymagania środowiska uruchomieniowego common language. Unmanaged kod jest wykonywany w środowisku uruchomieniowym common language z minimalnym Usług (np. brak usuwania śmieci, ograniczone debugowanie i tak dalej).

Odniesienie: http://www.dotnetspider.com/forum/11612-difference-between-managed-and-unmanaged-code.aspx

 4
Author: GMalla,
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-05-28 19:43:27

Zarządzany kod działa wewnątrz środowiska CLR czyli. NET runtime.In krótko wszystkie IL są zarządzane kod.Ale jeśli używasz jakiegoś oprogramowania firm trzecich, przykład VB6 lub komponentu VC++, są to kod niezarządzany jako. NET runtime (CLR) nie ma kontroli nad wykonaniem kodu źródłowego języka.

 3
Author: chirag Makwana,
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-10-09 06:09:37

Managed Code : - kod, którego forma MSIL (intermediate language) jest rozwijana po kompilacji kompilatora języka i bezpośrednio wykonywana przez CLR o nazwie managed code. np: - wszystkie 61 kod języka obsługiwany przez. Net framework

Kod Niezarządzany: - kod, który został opracowany przed .net, dla którego formularz MSIL nie jest dostępny i jest wykonywany przez CLR bezpośrednio zamiast CLR przekieruje do systemu operacyjnego, który jest znany jako kod niezarządzany.

Np: - COM, Win32 APIs

 2
Author: Ashok Narwal,
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-07-24 15:16:23
  • Managed Code: kod napisany w języku. NET jak C#, VB.NET.
  • UnManaged Code: kod nie jest napisany w języku. NET i MSIL nie nie rozumiem, co to jest i nie można uruchomić pod CLR; jak kontrolki innych firm, których używaliśmy w naszych aplikacjach. NET, które nie są tworzone w językach. NET.
 1
Author: Saket Kumar,
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-03-07 16:42:51

Przede wszystkim zrozum to, zanim .NET framework, Microsoft dostarczali samodzielne produkty, takie jak MFC (Visual C++), VB, FoxPro itp.

W 2002 roku Microsoft połączył swoje produkty i stworzył. NET framework. Teraz istnieje różnica między tym, jak kod był wykonywany wcześniej, a tym, jak kod jest zarządzany i wykonywany w. NET framework. Microsoft wprowadził koncepcję CLR Z. NET framework, która kompiluje kod pochodzący z dowolnego obsługiwanego lanugague Z. NET framework i zapewnia dodatkowe funkcje, takie jak memory mangement, garbage collection itd. Ale takie funkcje CLR nie były dostępne bezpośrednio wcześniej.

Więc jeśli tworzysz bibliotekę / kod w. NET framework (skompilowany z CLR) to nazywa się Managed code. Możesz użyć tej biblioteki dalej w innych aplikacjach/projektach. NET, i tam też CLR będzie zrozumieć, w jaki sposób został skompilowany wcześniej i dlatego pozostaje Twoim Zarządzaj kodem.

OTOH jeśli chcesz korzystać z bibliotek, które zostały napisane przed. NET framework to możesz zrobić z pewnym ograniczenia, ale pamiętaj, ponieważ CLR nie było tam w tym czasie, więc teraz, CLR nie zrozumie i skompiluje ten kod ponownie. A to się nazywa unmanaged code. Należy pamiętać, że biblioteki / assemblie stworzone przez osoby trzecie w celu zapewnienia pewnych funkcji / narzędzi mogą być również uważane za Kod niemający zarządzania, jeśli nie jest zgodny z CLR.

W kategoriach laików, Zarządzaj kodem jest czymś, co twój CLR rozumie i może skompilować go samodzielnie do dalszego wykonywania. W. NET framework, (z dowolnego język, który działa na. Net framework) gdy kod przechodzi do CLR, kod dostarcza pewne metadane, aby CLR mógł dostarczyć Ci funkcje określone tutaj . Kilka z nich to Garbage collection, Performance improvements, cross-language integration, memory management itd.

OTOH, unmanged code jest czymś specyficznym dla Maszyny i gotowym do użycia, nie trzeba go dalej przetwarzać.

 1
Author: Amnesh Goel,
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-08-24 06:08:01

Z Pro C# 5 I. NET 4.5 Framework:

Kod zarządzany vs. Niezarządzany: Być może najważniejszym punktem do zrozumienia języka C# jest to, że może on wytwarzać kod, który można wykonywać tylko w środowisku uruchomieniowym. NET (nigdy nie można użyć C# do zbudowania natywnego serwera COM lub niezarządzana aplikacja C / C++). Oficjalnie mówiąc, termin używany na określenie kodu kierującego . NET runtime jest zarządzanym kodem. Jednostką binarną zawierającą zarządzany kod jest / align = "left" / (więcej szczegółów na temat zespołów w zaledwie trochę). I odwrotnie, kod, który nie może być bezpośrednio hostowany przez. Net runtime jest określany jako kod niezarządzany.

 0
Author: arush436,
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-04-11 09:36:33