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.
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!
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.
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ę.
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
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++).
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.
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
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.
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
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.
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.
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ć.
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.
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