В настоящее время мы тестируем Mono, чтобы узнать, будут ли наши .NET DLL работать для клиентов в Linux. Наши библиотеки DLL предоставляют компоненты для Windows Forms. Я поместил DLL в каталог Debug, добавил ссылки и создал класс, полученный из Windows Form. Класс работал нормально, но после того, как я добавил ссылки на DLL и создал один из наших компонентов (intellisense работал нормально), он компилируется, но не запускается:
** (/home/aldwin/testMonoWF/testMonoWF/bin/Debug/testMonoWF.exe:26905): WARNING **: Could not load file or assembly 'OUR.ASSEMBLY, Version=1.0.0.1, Culture=neutral, PublicKeyToken=ATOKEN' or one of its dependencies. Unhandled Exception: System.IO.FileNotFoundException: Could not load file or assembly 'OUR.ASSEMBLY, Version=1.0.0.1, Culture=neutral, PublicKeyToken=ATOKEN' or one of its dependencies. File name: 'OUR.ASSEMBLY, Version=1.0.0.1, Culture=neutral, PublicKeyToken=ATOKEN'
Я просмотрел свойства сборки, и именно эта версия с этим открытым ключом.
Есть ли способ использовать эти DLL? Что я делаю неправильно?
EDIT:
Согласно MoMA, кроме некоторых [MonoTodo], которые не имеют отношения к ситуации, в трех из DLL есть одна проблема:
Calling Method | P/Invoke Method | P/Invoke Library void OnHandleCreated (EventArgs) | int GoText/ComboBoxControl.SetWindowTheme (IntPtr, string, string) | uxtheme.dll
Однако я открыл один из наших образцов проектов, созданных с помощью VS2008, указал ссылку на DLL в нужном месте, и он отлично работал. Но я не мог получить ссылку на работу в новом проекте. Я что-то делаю неправильно?
ИЗМЕНИТЬ 2: Чтобы уточнить, мы не хотим воссоздать существующее приложение Windows - мы имитируем клиента, создающего новое приложение с нашей dll. Я просто тестировал это, чтобы увидеть, была ли проблема с dll. Поскольку VS-приложение было в состоянии найти dll и успешно работать, похоже, это не проблема с dll. Новое приложение не вызывает ничего, что создано VS-созданным приложением.