Bir montaj .NET framework parçası ise Belirlenmesi

oy
15

Nasıl bir montaj parçası olup olmadığını, montaj adı veya montaj sınıfı (veya bunun gibi diğerleri) söyleyebilirsiniz .NET framework (yani, System.windows.Forms)?

Şimdiye kadar PublicKeyToken ve CodeBase özelliklerini kabul ettik, ama bunlar her zaman tüm çerçeve için aynı değildir.

Bu bilgi istiyorum sebebi benim EXE dosyası istemci makinelerde olduğu bu ihtiyacı kullanıyor meclislerinin bir listesini almak için, bu yüzden Visual Studio kurulum sistemini kullanmadan bir kurulum dosyasına doğru dosyaları paketleyebilirsiniz. Sorun, herhangi .NET framework meclisleri almak istemiyorum edilir ve bunu büyük bir güncelleme tamamlandı olduğunda dışarı rulo kolay bir otomatik süreç olmak istiyorum.

Bir IsFramework özellik olduğu nihai çözüm olacaktır ... :)

Oluştur 09/09/2008 saat 14:18
kaynak kullanıcı
Diğer dillerde...                            


7 cevaplar

oy
3

Ben yöntem hem en güvenilir ve en genel PublicKeyToken olacak şüpheleniyoruz. Evet, birden fazla, ama sonlu bir listesi ve çok sık değişmeyen tek olacak.

Hatta, sadece montaj adların beyaz listesini olabilir - bu liste de sonlu ve çerçevenin sürümleri arasındaki statik hem olacaktır.

Cevap 09/09/2008 saat 14:30
kaynak kullanıcı

oy
1

Sen montaj yayıncısı bakmak için yansıma kullanın ve meclisin yol ile o koordine olabilir. Kimin yayıncı Microsoft bir derleme bulmak ve bir yere altında bulunduğu takdirde C:\Windows\Microsoft.NET\Frameworkbunun çalışma zamanının parçası olan bir rahatlıkla söyleyebiliriz.

Düşündüm de, yayıncı bile gerekli olmayabilir. O yolu altında bir şey (bu olmamalıdır nerede diddling oluyor Hatalı çalışan bir uygulamayı engelleme) çalışma zamanı parçası olmalıdır.

Cevap 09/09/2008 saat 14:40
kaynak kullanıcı

oy
3

Hayır, "Sistem" ile başlamıyor. Bir çerçeve montaj olduğunu "WindowsBase" kontrol edebilir.

"Varsayılan" anahtarlarla imzalanan diğer Microsoft derleme olduğundan Ayrıca, PublicKeyToken kontrol edemez, ancak .NET Framework (Visual Studio derlemeler) bir parçası değildir.

Bunu yapmanın en iyi yolu yüklü NET çerçeveler bir koleksiyon almak ve hedef montaj (kendi RedistList ait olup olmadığını kontrol etmektir RedistList\FrameworkList.xml).

FrameworkList.xml bulunabilir:

  • .NET 2.0: C: \ Windows \ Microsoft.NET \ Framework64 \ v2.0.50727 \ RedistList
  • .NET 3.x: C: v \ Program Files (x86) \ Referans Meclisleri \ Microsoft \ Framework \ VersionNumber \ RedistList
  • .NET 4.x: C: \ Program Files (x86) \ Referans Meclisleri \ Microsoft \ Framework.NETFramework \ v VersionNumber \ RedistList
  • .NET Çekirdek: C: \ Program Files (x86) \ Referans Meclisleri \ Microsoft \ Framework.NETCore \ v VersionNumber \ RedistList
Cevap 14/04/2009 saat 21:02
kaynak kullanıcı

oy
1

Eğer dll hiçbiri GAC olacağını biliyorsanız, her montaj GAC'de olup olmadığını kontrol edebilir. Eğer durum bu ise, onu kopyalamayın. Değilse, o zaman anlaşıldı mı. Global Assembly Cache denilen derleme sınıfı bir özellik yoktur. Bu tabii ki diğerlerine oranla bazı durumlarda daha iyi sonuç verir.

Cevap 05/01/2010 saat 23:02
kaynak kullanıcı

oy
3

Ben AssemblyProductAttribute aracılığıyla montaj içinde gömülü Ürün Adı kullanıyorum Bunu gerçekleştirmek için.

var attribute = assembly.GetCustomAttributes(typeof(AssemblyProductAttribute), false)[0] as AssemblyProductAttribute;
var isFrameworkAssembly = (attribute.Product == "Microsoft® .NET Framework");

Ben uygulamanın Hakkında ekrana altında ürüne göre grup meclisleri için bu tekniği kullanıyorum ve benim için sadece iyi çalışıyor gibi görünüyor.

Cevap 12/08/2010 saat 20:14
kaynak kullanıcı

oy
4

Ben aynı sorunu ile uğraşmak zorunda kalmıştır. Ne yazık ki, verilen tüm cevaplar şu ana kadar olan yetersiz bir derleme .NET Framework parçası ise güvenle belirlemek için.

Microsoft adında bir sınıf koyar FXAssemblyversiyonunu belirten bir const dizeyle her çerçeve düzeneğinin genel ad içine:

.class private abstract auto ansi sealed beforefieldinit FXAssembly
    extends [mscorlib]System.Object
{
    .field assembly static literal string Version = string('2.0.0.0')

}

Bir montaj bir çerçeve montaj olup olmadığını kontrol etmek için bu "işaretleyici" kullanın. genel anahtarı kontrol etme çok ya zarar vermez.

Cevap 08/09/2010 saat 08:42
kaynak kullanıcı

oy
1

Visual Studio yüklediğinizde, formun çeşitli alt klasörler içinde referans meclisleri olsun C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\{FrameworkName}\{FrameworkVersion}- en ilginç şey olabilir RedistList\FrameworkList.xmlverilen çerçeve sürümü ile birlikte gelen tüm montaj adlarının bir listesini içeren bir dosya.

Örneğin C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.0\RedistList\FrameworkList.xml.NET Framework 4.0'ın gruplardaki bütün bir listesini içeren görünüyor.

Kolayca meclislerinin statik beyaz listeleri kurmak için bu dosyaları kullanabilirsiniz.

Cevap 28/01/2013 saat 07:08
kaynak kullanıcı

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more