Soru C # içinde yönetilen / yönetilmeyen kod nedir?


Ben kullanıyorum Assembly.GetEntryAssembly()... C # kodumda uygulamanın sürümünü almak için. İyi çalışıyor ama NUnit'te denediğimde döner NULL. MSDN'de geri dönebileceğini belirtir NULL yönetilmeyen kod çağrıldığında.

Yönetilen veya yönetilmeyen kod nedir? Anlamıyorum.


127
2017-12-02 15:31


Menşei




Cevaplar:


İşte MSDN'den bazı metinler yönetilmeyen kod.

Bazı kütüphane kodlarının yönetilmeyen kodları (örneğin, Win32 gibi yerel kod API'leri) çağırması gerekir. Çünkü bu, yönetilen kod için güvenlik alanının dışına çıkmak demektir, çünkü dikkatli olunması gerekir.

Yönetilen kod hakkında bazı ücretsiz açıklamaları aşağıda bulabilirsiniz:

  • CLR tarafından yürütülen kod.
  • Ortak dil çalışma zamanını, .NET Framework'ün temelini hedefleyen kod, yönetilen kod olarak bilinir.
  • Yönetilen kod, CLR'nin bellek yönetimi, diller arası entegrasyon, kod erişim güvenliği ve nesnelerin otomatik ömür boyu kontrolü gibi hizmetler sağlamak için gereken meta verileri sağlar. IL'ye dayalı tüm kodlar yönetilen kod olarak yürütülür.
  • CLI yürütme ortamı altında yürüten kod.

Senin sorunun için:

Sanırım NUnit, UnitTesting kodunuzu çalıştırıyor ve yönetilmeyen bir parçası olabilir. Ama emin değilim, bu yüzden altın için almayın. Eminim ki birisi size bu konuda daha fazla bilgi verebilir. Umarım yardımcı olur!


67
2017-12-02 15:32



Cevabınıza giden çabayı takdir ediyorum. ama "yönetilen kodun" neyi bilmediğini bilenler, cevabınızda ne demek istediğinizle mücadele edeceklerdir: Bilmeyecekler: "kütüphane kodu", "yönetilmeyen kod", "yerel kod API'si", CLR, .net framework, IL, CLI yürütme ortamı vb. temeli - BKSpurgeon


Bu konuyla ilgili iyi bir yazı.

Beşik levha:

Yönetilen kod Makine kodunda değil, bir makinede bir hizmet tarafından yorumlanıp çalıştırılan bir ara dilde derlenmez ve bu nedenle sizin için bellek ve iş parçacıkları gibi tehlikeli şeyleri işleyen (umarız!) güvenli bir çerçeve içinde çalışır. Modern kullanımda bu genellikle .NET anlamına gelir, ancak buna gerek yoktur.

Yönetilmeyen kod Makine koduna derlenir ve bu nedenle doğrudan işletim sistemi tarafından yürütülür. Bu nedenle, zarar verici / güçlü şeyler yapma yeteneği vardır. Yönetilen kod yoktur. Bu, her şeyin nasıl çalıştığıdır, bu yüzden tipik olarak .dlls gibi eski şeylerle ilişkilendirilir.

yerli Kod genellikle Yönetilmeyen ile eşanlamlıdır, ancak aynı değildir.


164
2017-12-02 15:39



Yani, hacklemede .net langauge (C #, C ++) kullanamazsın, değil mi? - Haroon A.
@H_wardak 'hack' olarak ne tanımlarsınız? Bu çok genel bir terimdir, NORAD'a girme ve bazı yazmaçların aynı olduğunu söylemeye benzer. - Alex
Bir keresinde görüşmeci tarafından soruldum, C # 'da yönetilmeyen kod yazabilir / yazabilir miyiz? Birisi bana bu konuda yardım edebilir mi? - RSB
@RSB: C # 'da yönetilmeyen kod yazamazsınız (ancak, doğrudan C #' dan yönetilmeyen kodu doğrudan arayabilirsiniz). Teorik olarak, doğru derleyici ve çerçeve ile yapabilirdiniz, sanırım. Pratikte bu, C # 'ı doğrudan makine koduna derleyebilecek bir derleyiciye ihtiyacınız olduğu anlamına gelir. Bunun nasıl işe yarayacağını bilmiyorum. - James Haug
Bu benim görüşüme göre kabul edilen cevap olmalı. - Zimano


Düşündüğün zaman yönetilmeyenMakineye özgü, makine düzeyinde kod düşünün. X86 montaj dili gibi. Yönetilmeyen (yerel) kod, derlenecek ve o an için tüm işletim sistemi dışındaki öğeler için tasarlandığı işlemci üzerinde doğrudan çalışacak şekilde bağlanır. Taşınabilir değil, ama hızlı. Çok basit, aşağı soyulmuş kod.

Yönetilen kod, Java'dan eski Yorumlayıcı BASIC'e veya .NET'in altında çalışan herhangi bir şeye sahiptir. Yönetilen kod tipik olarak bir orta seviye P Kodu veya bayt kodu talimat setine derlenir. Bunlar, montaj diline benzer görünse de, makineye özel talimatlar değildir. Yönetilen kod, programı çalıştığı makineden ayırır ve tüm belleğin dolaylı olarak ayrıldığı ve genellikle konuşma yaptığınız gibi, bağlantı noktası, bellek adres alanı, yığın vb. Gibi makine kaynaklarına doğrudan erişiminizin olmadığı güvenli bir sınır oluşturur. Fikir daha güvenli bir ortamda çalışmaktır.

Yönetilen bir değişkenden, yönetilmeyen bir değişkene dönüştürmek için, gerçek nesnenin kendisine ulaşmanız gerekir. Muhtemelen bazı ek ambalajlarda sarılır veya kutulanır. Yönetilmeyen değişkenler (bir 'int' gibi) - 32 bitlik bir makinede - tam olarak 4 bayt alır. Tepegöz veya ek ambalaj yoktur. Yönetilen koddan yönetime geçme süreci - ve tekrar - denir "dizme"Programlarınızın sınırı geçmesine izin veriyor.


61
2017-09-04 06:57



Açık bir açıklama. - Jiggneshh Gohel
Masaranlık, değer ve referans türleri ile nasıl etkileşir? Örneğin, MarshalByRefObject hakkında bir şeyler gördüğümü hatırlıyorum. - Kyle Baran


Mümkün olduğunca az kelime ile:

  • yönetilen kod = .NET programları
  • yönetilmeyen kod = "normal" programlar

23
2017-12-02 15:42



bir .NET programı "normal" değil mi? - jtate
@jtate - Bu biraz aşağılık, evet. :) Daha sezgisel hale getirmeye çalışıyordum. Her neyse, bu 8 yıl önce bitti. Günümüzde yaygın olarak kullanılan günlük kullanım dillerine sahip sayısız programlama diliyle, bu ayrım gerçekten daha belirsizdir, evet. - Vilx-


Temel olarak yönetilmeyen kod, .NET CLR (aka VB.NET, C #, vb.) Altında çalışmayan koddur. Benim tahminim NUnit'in .NET kodu olmayan bir koşucu / sarıcıya sahip olmasıdır (aka C ++).


5
2017-12-02 15:36





NUnit birim testlerini ayrı bir AppDomain'de yükler ve giriş noktasının (muhtemelen gerekli değildir) çağrıldığını varsayar, dolayısıyla giriş derlemesi boştur.


4
2017-12-02 15:40





Yönetilen Kod:
  İle "işbirliği sözleşmesi" altında çalışan kod   ortak dil çalışma zamanı. Yönetilen kod meta verileri sağlamalı   çalışma zamanı bellek gibi hizmetler sağlamak için gerekli   yönetim, diller arası entegrasyon, kod erişim güvenliği ve   nesnelerin otomatik ömür boyu kontrolü. Microsoft'a dayalı tüm kodlar   ara dil (MSIL) yönetilen kod olarak yürütülür.

Yönetilmeyen Kod:
  Dikkate alınmadan oluşturulan kod   ortak dil çalışma zamanının kuralları ve gereksinimleri. Yönetilmeyen   kod, minimal dil ile ortak dil çalışma ortamı ortamında yürütür   hizmetler (örneğin, çöp toplama, sınırlı hata ayıklama ve   yakında).

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


4
2018-05-28 19:43





Yönetilen kod CLR yani .NET çalışma zamanı ortamının içinde çalışır. Kısaca tüm IL yönetilir kod.Ama bazı üçüncü parti yazılım örnek VB6 veya VC ++ bileşeni kullanıyorsanız .NET çalışma zamanı (CLR) gibi yönetilmeyen kod, kaynak kod yürütme üzerinde denetim sahibi değil dilin


3
2017-10-09 06:09





Yönetilen Kod: - Dil derleyici derlemesinden sonra doğrudan MSIL (ara dil) formunun geliştirildiği ve doğrudan CLR yönetilen kod denir. örneğin: - .net framework tarafından desteklenen tüm 61 dil kodu

Yönetilmeyen Kod: - daha önce geliştirilen kod .net hangi MSIL formu mevcut değildir ve tarafından yürütülür CLR doğrudan yerine CLR yönetilmeyen kod olarak bilinen işletim sistemine yönlendirir.

örneğin: -COM, Win32 API'leri


2
2017-07-24 14:46



Bu yayında birtakım hatalar var. En açıkçası MISL (MSIL demek). - Matt Seymour


  • Yönetilen Kod: .NET dilinde C #, VB.NET gibi yazılmış kod.
  • yönetilmeyen Kod: .NET dilinde yazılmadı ve MSIL yapar ne olduğunu anlamıyor ve CLR altında çalışamıyor; .NET dillerinde oluşturulmamış .NET uygulamalarımızda kullandığımız üçüncü taraf denetimleri gibi.

1
2017-12-19 02:01





Her şeyden önce bunu anlayın .NET framework, Microsoft gibi tek başına ürünleri sağlıyorlardı MFC (Visual C++), VB, FoxPro vb.

2002 yılında Microsoft ürünlerini birleştirdi ve .NET framework yaptı. Artık kodun nasıl yürütüldüğü ile kodun .NET çerçevesinde nasıl yönetildiği ve yürütüldüğü arasında bir fark var. Microsoft kavramını tanıttı CLR.NET framework'ün desteklenen herhangi bir lanugague'sinden gelen kodu derleyen ve benzeri ek işlevler sağlayan .NET framework ile memory mangement, garbage collection Ancak, bu tür CLR özellikleri daha önce doğrudan mevcut değildi.

Yani, .NET çerçevesinde kütüphane / kod oluşturuyorsanız   CLR) o zaman denir Managed code. Bu kütüphaneyi kullanabilirsiniz   diğer .NET uygulamasında / projesinde ve orada da CLR   Daha önce nasıl derlendiğini anlayın, bu yüzden bu sizin   kodu yönet.

OTOH. NET framework önce yazılmış olan kütüphaneleri kullanmak istiyorsanız OTOH, belirli sınırlamalar ile yapabilirsiniz, ama unutmayın, CLR o zaman orada değildi, şimdi, CLR bu kodu tekrar anlamayacak ve derlemeyecek . Ve bu çağrılacak unmanaged code. Bazı üçüncü taraflarca belirli özellikler / araçlar sağlaması için oluşturulan kütüphaneler / birleştirmeler, CLR uyumlu değilse, aynı zamanda kodsuz kod olarak kabul edilebilir.

Tercüman olarak, Kodu yönet CLR'nizin anlayacağı ve daha fazla yürütme için kendi başına yapabileceği bir şeydir. .NET çerçevesinde, (.NET framework üzerinde çalışan herhangi bir dilden) Kod CLR'ye giderse, kod bazı meta veri bilgilerini sağlar, böylece CLR size belirtilen özellikleri sağlayabilir İşte. Çok azı Garbage collection, Performance improvements, cross-language integration, memory management vb.

, otoh yönetilmeyen kod Makineye özgü ve kullanıma hazır bir şeydir, daha fazla işlemeye gerek yoktur.


1
2017-08-24 06:08



Korkarım çok, çok ve çok sayıda ve bilgisiz görüş. Bu sürpriz olabilir, ancak CLR (genellikle C ++ / CLI'de yazılmış) yönetilmeyen kodu da çalıştırabilir. Ayrıca, yönetilen kodun IL olarak kullanılabilmesi için bir gereklilik yoktur. .NET Native bir süredir etrafta ve önceden derlenmiş meclislerle geliyor. Ne aradın "CLR uyumlu" büyük ihtimalle "CLS uyumlu". CLS uyumluluğunun karşılanamaması, yönetilen kodun yönetilmemesini, bir anda aniden yapmaz. Yönetilmeyen kod - tanımınıza rağmen - oldukça kolaydır (COM üzerinden RCW, P / Invoke, C ++ / CLI, vb.). - IInspectable