Ürünümüz bir C++ projesine dayanmaktadır, ancak şimdi ön uç için C# projeleri kullanıyoruz. Şimdi de 64 bit versiyonu yapıyoruz.
Planımız, tüm C# dlls'lerini AnyCPU olarak oluşturmaktır. C# projeleri, ortak bir bin klasöründeki C++ dll'lerine başvuruda bulunacaktır. X64 binasında bin klasörü C++ dlls'imizin x64 versiyonlarını içerecek ve Win32 binaryum dosyası oluştururken C++ dlls'inin 32 bit sürümlerini içerecektir. Bu yüzden C# projeleri AnyCPU'yu oluşturacak, ancak x64 veya Win32 C++ dll'i içerecek.
Sorum şu, bu iş mi? Çalışma zamanında, çalıştırdığımız exe'ye göre 32 veya 64'ün tamamı olmalı, ancak platforma özel bir dll içeren AnyCPU'yu hedefleyen bir projeyi zamanla derleyebiliriz? Yoksa tüm C# dlls'imizin platforma özel versiyonlarını yapmalı mıyız? TeşekkürlerC# AnyCPU projesi bir platforma özel dll içerebilir
cevap
Hatırladığım kadarıyla, bu işler.
Sadece 32bit DLL'im vardı, C# derlenmiş ve açılışta çöktü. Yani 64bit DLL koyarsanız, C# yeniden derlemeniz gerekmez sanırım.
Yaptım. Derleme uyarıları vermesine rağmen.
Çalışmalı, geçmişte böyle bir yaklaşım kullandım ve iyi çalışıyor. ne tür derleme uyarıları alırsınız?
Bu, öncelikli olarak, doğru işletim sistemi için doğru DLL'leri seçerek bir dağıtım sorunudur. İki kurulum projesi oluşturursanız, x86 için bir diğeri x64 için bir diğeri ise oldukça basittir. Saydam bir şekilde çalışmak da mümkündür. EXE'inizi içeren dizinde bir x86 ve bir x64 alt dizini oluşturup, bu alt dizinlerdeki DLL'lerin sırasıyla 32 bit ve 64 bit yapılarını oluşturursunuz. Başlangıçta, sürecinizin bitini öğrenmek için IntPtr.Size'yi işaretleyin. Ardından, Windows'un doğru DLL dosyasını bulabilmesi için buna göre SetDllDirectory komutunu pinvoke edin. Şunun gibi:
using System.Runtime.InteropServices;
using System.Reflection;
using System.IO;
...
public static void SetupDllDirectory() {
string path = Assembly.GetEntryAssembly().Location;
path = Path.Combine(path, IntPtr.Size == 8 ? "x64" : "x86");
bool ok = SetDllDirectory(path);
if (!ok) throw new System.ComponentModel.Win32Exception();
}
[DllImport("kernel32.dll", SetLastError = true)]
private static extern bool SetDllDirectory(string path);
dll kopyalamak için bir post inşa olayı kullanın. Dizini PATH ortam değişkenine eklemek için Environment.SetEnvironmentVariable() öğesini kullanmak başka bir yaklaşımdır.
- 1. .NET AnyCPU proje platforma özel kütüphaneye
- 2. C# .dll derlemesi bir giriş noktası içerebilir mi?
- 3. Ayar platforma özel
- 4. C#/C++ - DllImport DLL bulamıyor DLL
- 5. bir amaç-c projesi
- 6. C# winforms bir projeyi .dll dosyasına dönüştürüyor
- 7. C# kurulum projesi
- 8. dll, c içinde xml dosyaları paketi C#
- 9. Eclipse'de bir ++ C++ projesi oluşturma
- 10. Hata ayıklama C++ dll C#
- 11. NODEFAULTLIB VS2010 C kabus ++ projesi: sürüm
- 12. Xamarin Formlar'da iOS projesi için DLL oluşturulmadı mı?
- 13. C# DLL eklentisi mimarisi
- 14. C++ dll Döngü Problemi
- 15. dll yorumlarına bakın C#
- 16. yönetilen kodda özel eylem dll
- 17. C++ DLL ve SA'dan SAFEARRAY'i bırakın C#
- 18. C++, C# ve ruby'den c dll çağrılıyor
- 19. C++ C++ DLL işlevi nasıl yapılır C#
- 20. Projesi C# 4.0 özellikleri
- 21. C projesi nasıl oluşturulur?
- 22. Lua tarafından bir C++ DLL yüklenebilir oluşturma
- 23. Bir C# dll belgesini nasıl kaydederim?
- 24. C# olmayan bir .NET DLL sürümü okuyun?
- 25. C# Visual Studio çözümü bir dll içinde
- 26. DLL 'OraOps12.dll yüklenemedi
- 27. MSBuild olmadan bir C# projesi derlemek mümkün mü?
- 28. Bağımlılıklar içeren bir WiX özel eylem DLL dosyası nasıl çalıştırılır
- 29. Yönetilmeyen C++ dizesine geçiş C# DLL
- 30. C++ dll C# visual studio 2015