Bu cevabı göndermekten çekiniyorum, aslında teknik olarak mümkün ama pratikte o kadar iyi çalışmıyor. CLR'nin sürüm numaraları ve çekirdek çerçeve derlemeleri 4.5'te değiştirilmemiştir. Hala CLR'nin v4.0.30319'u hedefliyorsunuz ve çerçeve derleme sürüm numaraları hala 4.0.0.0'dır. İldasm.exe gibi bir sökücü ile baktığınızda derleme bildirimiyle ilgili ayırt edici olan tek şey, 4.5'in gerekli olduğunu ve değiştirilmesi gerektiğini söyleyen bir [TargetFramework] özniteliğinin varlığıdır. Aslında o kadar kolay değil, derleyici tarafından yayınlanır.
En büyük fark o kadar görünür değil, Microsoft derlemelerin yürütülebilir başlığında uzun süredir gecikmiş bir değişiklik yaptı. Çalıştırılabilir dosyanın hangi Windows sürümüyle uyumlu olduğunu belirtir. XP, Windows 2000 ile başlayan önceki bir Windows nesline aittir. Ana sürüm numarası 5'tir. Vista, mevcut nesil, ana sürüm numarası 6'nın başlangıcıydı.
.NET derleyicileri her zaman minimum sürüm numarasını 4.00, Windows NT ve Windows 9x sürümü olarak belirtmişlerdir. Bunu, derlemede dumpbin.exe / üstbilgileri çalıştırarak görebilirsiniz. Örnek çıktı şuna benzer:
OPTIONAL HEADER VALUES
10B magic # (PE32)
...
4.00 operating system version
0.00 image version
4.00 subsystem version
0 Win32 version
...
.NET 4.5'teki yenilikler, derleyicilerin bu alt sistem sürümünü 6.00 olarak değiştirmesidir. Windows, sadece yeterince küçük olup olmadığını kontrol etmenin ötesinde bu sayıya dikkat ettiği için büyük ölçüde vadesi geçmiş bir değişiklik. Ayrıca, programın Windows'un eski sürümlerinde çalışmak üzere yazıldığını varsaydığı için uygulama uyumlu özelliklerini de açar. Bu özellikler soruna neden olur, özellikle Windows'un Aero'daki bir pencere boyutu hakkında yatması zahmetlidir. Programın Aero içeren bir Windows sürümünde çalışacak şekilde tasarlandığını gördüğünde, bir Aero penceresinin kalın sınırları hakkında yalan söylemeyi bırakır.
Derlemelerinizde Editbin.exe'yi / subsystem seçeneğiyle çalıştırarak bu sürüm numarasını değiştirebilir ve tekrar 4,00 olarak ayarlayabilirsiniz. Bu cevap , örnek bir postbuild olayını gösterir.
Bununla birlikte, iyi haberin nerede bittiği ile ilgili, önemli bir sorun, .NET 4.5'in .NET 4.0 ile pek uyumlu olmamasıdır. Şimdiye kadarki en büyük sorun, sınıfların bir derlemeden diğerine taşınmasıdır. En önemlisi, bu [Uzantı] özniteliğinde gerçekleşti. System.Core.dll'de daha önce .NET 4.5'te Mscorlib.dll'ye taşınırdı. Kendi uzantı yöntemlerinizi bildirirseniz, programınız, System.Core başvuru derlemesinin .NET 4.5 sürümündeki [TypeForwardedTo] özniteliği tarafından etkinleştirilen özniteliği Mscorlib'de aramayı söyler. Ancak programınızı .NET 4.0'da çalıştırdığınızda orada değil
Ve elbette, yalnızca .NET 4.5'te bulunan sınıfları ve yöntemleri kullanmayı bırakmanıza yardımcı olacak hiçbir şey yoktur. Bunu yaptığınızda, programınız 4.0'da çalıştırıldığında TypeLoadException veya MissingMethodException ile başarısız olur
Sadece 4.0'ı hedefleyin ve tüm bu sorunlar ortadan kalkar. Veya programcıların sık sık veremeyeceği, ancak neden olduğu güçlüklere işaret ederek kesinlikle teşvik edebileceği bir iş kararı olan bu sıkışıklığı kırın ve XP'yi desteklemeyi bırakın. Elbette eski işletim sistemlerini desteklemenin sıfır olmayan bir maliyeti var, sadece test etme çabası önemli. Yönetim tarafından genellikle fark edilmeyen bir maliyet olan Windows uyumluluğu, kendilerine belirtilmedikçe efsanevidir. Bu maliyeti müşteriye iletin ve doğru kararı çok daha hızlı verme eğilimindedirler :) Ancak bu konuda size yardımcı olamayız.