.NET 4 yapılandırmasında 'useLegacyV2RuntimeActivationPolicy' ne yapar?


214

SlimDX kullanılan ve bu nedenle yönetilmeyen kodu olan bir projeyi dönüştürürken, .NET 4.0'a aşağıdaki hatayla karşılaştım:

Karma mod montajı, çalışma zamanının 'v2.0.50727' sürümüne göre oluşturulmuştur ve ek yapılandırma bilgileri olmadan 4.0 çalışma zamanına yüklenemez.

Etrafımda dolaşmak bana bunu uygulama yapılandırmasına eklemek için bir çözüm verdi:

<configuration>
  <startup useLegacyV2RuntimeActivationPolicy="true">
    <supportedRuntime version="v4.0"/>
  </startup>
</configuration>

Sorum şu, ne useLegacyV2RuntimeActivationPolicyyapıyor? Bununla ilgili herhangi bir belge bulamıyorum.

Yanıtlar:


165

Biraz zaman geçtikten sonra (ve daha fazla arama yapmadan), bu blog girişini Jomo Fisher tarafından buldum .

Son zamanlarda gördüğümüz sorunlardan biri, yan yana çalışma süreleri desteği nedeniyle .NET 4.0'ın eski karma modda derlemelere bağlanma şeklini değiştirmesidir. Bu derlemeler, örneğin, C ++ \ CLI'den derlenenlerdir. Şu anda kullanılabilen DirectX derlemeleri karışık moddur. Böyle bir mesaj görürseniz, o zaman sorunla karşılaştığınızı bilirsiniz:

Karma mod montajı, çalışma zamanının 'v1.1.4322' sürümüne göre oluşturulmuştur ve ek yapılandırma bilgileri olmadan 4.0 çalışma zamanına yüklenemez.

[Makaslamak]

Uygulamalar için iyi haber şu şekilde bir app.config bayrağını ayarlayarak bu derlemeler için .NET 2.0 dönemine bağlama seçeneğine sahip olmanızdır:

<startup useLegacyV2RuntimeActivationPolicy="true">
  <supportedRuntime version="v4.0"/>
</startup>

Böylece, çalışma zamanının karışık mod montajlarını yükleme şekli değişmiş gibi görünüyor. Bu değişiklik veya neden yapıldığı hakkında hiçbir ayrıntı bulamıyorum. Ancak useLegacyV2RuntimeActivationPolicyöznitelik CLR 2.0 yüklemesine geri döner.


28
Bu arada marklios cevabının ( stackoverflow.com/questions/1604663/… ) bu değişiklikle ilgili kapsamlı açıklamasına bir bağlantı sağladığını belirtmek gerekir .
Steffen Opel

1
Bunun ayrıntılı bir açıklaması MSDN'de bulunabilir (Yukarıda belirtilen çözümden açıkça bahsetmese de): msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane

Bunu hem uygulamamın yapılandırmasına hem de UnitTest projem için bir yapılandırmaya eklediysem ve testleri çalıştırırken hala bir dosya yükleme hatası alıyorum. Yeni bir soru yayınlamalı mıyım?
CodenameCain

126

İşte son zamanlarda bu özellik hakkındaki bilgi boşluğuna yardımcı olmak için yazdığım bir açıklama. http://www.marklio.com/marklio/PermaLink,guid,ecc34c3c-be44-4422-86b7-900900e451f9.aspx (İnternet Arşivi Wayback Makinesi bağlantısı)

En alakalı bitleri alıntılamak için:

[.NET kurulumu] v4 “etkilemez”. Yüklendiğinde mevcut bileşenlerin davranışını değiştirmemelidir.

UseLegacyV2RuntimeActivationPolicy özniteliği, “Eski shim API'larına bazı bağımlılıklarım var. Lütfen onları seçilen çalışma zamanına göre eskiden çalıştıracak şekilde yapın. ”

Bunu neden varsayılan davranış yapmıyoruz? Bu davranışın daha uyumlu olduğunu ve önceki sürümlerden taşıma kodunu çok daha kolay hale getirdiğini iddia edebilirsiniz. Hatırlarsanız, bu varsayılan davranış olamaz çünkü v4'ün kurulumunu etkili hale getirir, bu da makinenizde yüklü olan uygulamaları bozabilir.

Yazının tamamı bunu daha ayrıntılı olarak açıklıyor. RTM'de bu konudaki MSDN belgeleri daha iyi olmalıdır.


user20493, uygulamanızı, uygulamanın yazma erişimine sahip olduğu ve sonuçta oluşan günlükleri paylaştığı boş bir dizine ayarlanmış COMPlus_CLRLoadLogDir ortam değişkeni ile çalıştırabilirsiniz (paylaşmadan önce herhangi bir PII için fırçalayın). Neler olduğunu açıklamaya yardımcı olabilir. Config özniteliği, uygulamanızın çalıştığı içeriğe uygulanamayabilir.
Mark Miller

Bu bağlantı ayrıca sorunun ne olduğunu ve çözümün sizin için ne yaptığını anlamanıza yardımcı olmalıdır: msdn.microsoft.com/en-us/magazine/ee819091.aspx
Mouhammed Soueidane
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.