Ich arbeite an einem Projekt, wo ich herausfinden muss, welche Version von AutoCAD auf dem Zielcomputer installiert ist. Wir haben die Möglichkeit der Anwesenheit mehrerer AutoCAD-Versionen in Erwägung gezogen und müssen daher, je nach Benutzerauswahl, die benötigten DLLs dynamisch aus dieser Version von AutoCAD laden. Zunächst erkennt das Programm die verfügbaren Versionen von AutoCAD und zeigt es dem Benutzer an. Dann, nach der Auswahl einer bestimmten Version, kopiert das Programm DLLs wie (accoremgd.dll, acdbmgd.dll, acmgd.dll) in das Programmverzeichnis. Aber wenn ich versuche, diejenigen dll dynamisch zu laden, zeigt es Fehler folgende:Ausnahme beim Laden von AutoCAD dll dynamisch
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
Meine Unterroutine, die dynamisch die Datei lädt ist:
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 denke, das Problem könnte mit den Abhängigkeiten der DLL. Was soll getan werden? Gibt es Dokumente oder Artikel?
Aktualisierung: Das Zielframework des Programms ist 4.0 und Platform target ist Any CPU.
Ich lief fuselogvw.exe und ich denke, hier könnte ein Hinweis auf mein Problem sein. Ich habe keine Ahnung, was hier vorgeht, also habe ich ein Bild hinzugefügt. Es wäre eine große Hilfe, wenn es klargestellt wird.
Verwenden Sie den "Fusion Log Viewer" (fuslogvw.exe), um die Protokollierung von Bindungsfehlern zu aktivieren (oder [dies] (http://stackoverflow.com/a/16049933/21567), wenn Sie müssen). –