Я работаю над проектом, где мне нужно выяснить, какая версия AutoCAD установлена на целевом компьютере. Мы рассмотрели возможность наличия множественной версии AutoCAD и, таким образом, согласно выбору пользователя, мы должны динамически загружать требуемые DLL из этой версии AutoCAD. Сначала программа обнаруживает доступные версии AutoCAD и показывает ее пользователю. Затем, после выбора конкретной версии, программа копирует DLL, например (accoremgd.dll, acdbmgd.dll, acmgd.dll) в каталог программы. Но когда я пытаюсь загрузить те DLL динамически, он показывает следующие ошибки:Исключение при загрузке динамической базы данных AutoCAD
Could not load file or assembly 'accoremgd.dll' or one of its dependencies. The specified module could not be found.
StackTrace:
at System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) at System.Reflection.RuntimeAssembly.InternalLoadFrom(String assemblyFile, Evidence securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm, Boolean forIntrospection, Boolean suppressSecurityChecks, StackCrawlMark& stackMark) at System.Reflection.Assembly.LoadFrom(String assemblyFile) at DynamicDLLAdd.Form1.btnLoad_Click(Object sender, EventArgs e) in e:\AutoCadOperations\Test.AutoCadLoad_Re\DynamicDLLAdd\Form1.cs:line 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);
}
I думаю, проблема может быть связана с зависимостями dll. То, что должно быть сделано? Существуют ли какие-либо документы или статьи?
Обновление: Целевая структура программы 4.0, а целью платформы является любой процессор.
Я запустил fuselogvw.exe, и я думаю, что здесь может быть ключ к моей проблеме. Я понятия не имею, что здесь происходит, я добавил фотографию. Это будет очень полезно, если это прояснит.
Используйте «Fusion Log Viewer» (fuslogvw.exe), чтобы включить ведение журнала ошибок привязки (или [this] (http://stackoverflow.com/a/16049933/21567), если необходимо). –