我確實有這樣的問題,並最終節省資源DLL和lodaing爲x86或x64,當庫第一次initilized的DLL。這對我來說是最清潔的方式。
另一種方式,當你在nuget中包含dll時,你也必須確保當som一個刪除/清除bin mapp時,同一個dll會重新運行。
所以,你必須添加到nuger並創建構建文件一個目標,再複製上構建
這裏的dll文件是我做的。
internal class EmbeddedDllClass
{
public static void LoadAllDll()
{
Assembly assem = Assembly.GetExecutingAssembly();
if (IntPtr.Size == 8)
{
var path = Path.Combine(string.Join("\\", assem.Location.Split('\\').Reverse().Skip(1).Reverse()), "x64");
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
path = Path.Combine(path, "SQLite.Interop.dll");
if (!File.Exists(path))
File.WriteAllBytes(path, Properties.Resources.SQLite_Interop_64);
}
else if (IntPtr.Size == 4)
{
var path = Path.Combine(string.Join("\\", assem.Location.Split('\\').Reverse().Skip(1).Reverse()), "x86");
if (!Directory.Exists(path))
Directory.CreateDirectory(path);
path = Path.Combine(path, "SQLite.Interop.dll");
if (!File.Exists(path))
File.WriteAllBytes(path, Properties.Resources.SQLite_Interop_86);
}
}
}
然後叫它
EmbeddedDllClass.LoadAllDll();
$(平臺)有不同的價值觀,像任何CPU,86,64。我會檢查它是如何完成具有平臺特定依賴性的開源庫的。據我所知,有些通過單獨的nuget軟件包提供這種平臺特定的依賴關係。就像他們在https://www.nuget.org/packages/CoreCompat.System.Drawing/1.0.0-beta006 –
中所做的那樣,當您針對OSX構建時,$(Platform)變量的值是多少? –
'Platform = AnyCPU',但對於Windows和Linux版本來說則是一樣的。 – sakra