Не удается получить Microsoft.VisualBasic.dll для Mono 2.10

Я пытался перенести библиотеку .NET, созданную для Windows, на Ubuntu 11.04, используя Mono. Библиотека использует .NET 4.0, поэтому версия моно (2.6.7), стандартная для Ubuntu 11.04, не подходит. В частности, я пытаюсь использовать Microsoft.VisualBasic.Devices.Computer.Info.TotalPhysicalMemory. Я долго искал пакеты или сценарии параллельной сборки, которые устанавливают Microsoft.VisualBasic.dll, но ни один из них не нашел.

В идеале я хотел бы найти способ получить лучшее из обоих миров, Mono с поддержкой .NET 4.0 и Microsoft.VisualBasic, чтобы код не нужно было изменять. Я бы согласился на альтернативу, использующую другой метод (хотя метод P/Invoke, который я видел в этот предыдущий пост меня не привлекает).

Любая помощь приветствуется.


person jalane    schedule 10.07.2011    source источник
comment
Зачем вам TotalPhysicalMemory? Ваше приложение не должно зависеть от знания размера физической памяти. Это только для диагностики? Вы можете просто удалить зависимость от свойства или попытаться определить размер памяти в системах Linux специфичным для Linux способом. P/Вызов Win32 API не помогает, потому что Linux не Win32.   -  person dtb    schedule 11.07.2011
comment
Я не писал код, использующий TotalPhysicalMemory. Это из библиотеки Cudafy.NET, и они используют ее при эмуляции графического процессора для настройки свойств устройства.   -  person jalane    schedule 11.07.2011
comment
Похоже, Cudafy.NET не предназначен для работы с Mono. Зависимость от сборки Microsoft.VisualBasic, вероятно, лишь верхушка айсберга. Попробуйте найти другую библиотеку, которая работает с Mono, или обратитесь к разработчику Cudafy.NET и попросите поддержку Mono.   -  person dtb    schedule 11.07.2011


Ответы (3)


Похоже, получение VB.dll вам тоже не поможет. Этот метод не реализован в Mono:

https://github.com/mono/mono-basic/blob/master/vbruntime/Microsoft.VisualBasic/Microsoft.VisualBasic.Devices/ComputerInfo.vb

person jpobst    schedule 10.07.2011

Вы можете попытаться обмануть Cudafy, создав собственную версию DLL.

Используйте отражатель или проверьте здесь, чтобы увидеть интерфейс

https://github.com/mono/mono-basic/blob/master/vbruntime/Microsoft.VisualBasic/Microsoft.VisualBasic.Devices/ComputerInfo.vb

Вы можете использовать счетчик производительности в Mono, чтобы фактически получить объем памяти;

var pc = new PerformanceCounter("Mono Memory", "Total Physical Memory");
var mem = pc.RawValue();
person IvoTops    schedule 13.07.2012

Вы можете использовать инструмент MoMA, чтобы проверить, насколько моно совместимо с вашим проектом.

В вашем конкретном случае нужный вам метод не реализован, если это единственное, что мешает вашему проекту работать, вы можете реализовать его, а также создать и предоставить свою собственную MS.VB.dll, пока моно не выпустит версию с изменением в нем . После того, как вы создали монобазовый модуль, его легко установить на любую машину (с уже установленным моно), просто запустите:

gacutil -i путь/к/MS.VB.dll

и dll будет установлен в gac.

person Rolf Bjarne Kvinge    schedule 11.07.2011