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.
İş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!
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.
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.
Mümkün olduğunca az kelime ile:
- yönetilen kod = .NET programları
- yönetilmeyen kod = "normal" programlar
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 ++).
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.
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
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
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
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.