Я работаю над проектом, в котором мне нужно выяснить, какая версия AutoCAD установлена на целевом компьютере. Мы рассмотрели возможность наличия нескольких версий AutoCAD и, таким образом, по выбору пользователя, мы должны динамически загружать необходимые библиотеки DLL из этой версии AutoCAD. Сначала программа обнаруживает доступные версии AutoCAD и показывает их Пользователю. Затем, после выбора конкретной версии, программа копирует такие библиотеки DLL, как (accoremgd.dll, acdbmgd.dll, acmgd.dll) в каталог программы. Но когда я пытаюсь загрузить эти DLL динамически, появляется следующая ошибка:
Не удалось загрузить файл или сборку accoremgd.dll или одну из ее зависимостей. Указанный модуль не может быть найден.
Трассировки стека:
в System.Reflection.RuntimeAssembly._nLoad (AssemblyName имя_файла, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntanrospection Assembly , RuntimeAssembly reqAssembly, StackCrawlMark & stackMark, IntPtr pPrivHostBinder, булева throwOnFileNotFound, булева forIntrospection, булевы suppressSecurityChecks) при System.Reflection.RuntimeAssembly.InternalLoadFrom (String assemblyFile, Evidence securityEvidence, Byte [], значение хэш AssemblyHashAlgorithm HashAlgorithm, булевой forIntrospection, булевы suppressSecurityChecks, StackCrawlMark & stackMark ) в System.Reflection.Assembly.LoadFrom (String assemblyFile) в DynamicDLLAdd.Form1.btnLoad_Click (отправитель объекта, EventArgs e) в e: \ AutoCadOperations \ Test.AutoCadLoad_Re \ DynamicDLLAdd \ Form1. cs: строка 140
Моя подпрограмма, которая динамически загружает файл:
try
{
string destFile = @Path.Combine(Environment.CurrentDirectory,"accoremgd.dll");
if (!File.Exists(destFile))
return;
Assembly a = null;
a = Assembly.LoadFrom(destFile);
AppDomain.CurrentDomain.Load(a.GetName());
MessageBox.Show("LOADED");
Type classType = a.GetType("Autodesk.AutoCAD.ApplicationService.Document");
object obj = Activator.CreateInstance(classType);
MethodInfo mi = classType.GetMethod("Create");
//rest of the code here
}
catch (Exception exp)
{
MessageBox.Show(exp.Message);
MessageBox.Show(exp.Source);
MessageBox.Show(exp.StackTrace);
}
Я думаю, проблема может быть в зависимостях dll. То, что должно быть сделано? Есть ли в наличии какие-либо документы или статьи?
Обновление: Целевая платформа программы - 4.0, а целевая платформа - Любой ЦП.
Я запустил fuselogvw.exe и думаю, это может быть ключом к разгадке моей проблемы. Понятия не имею, что здесь происходит, поэтому добавил картинку. Было бы большим подспорьем, если бы прояснил это.