대상 컴퓨터에 설치된 AutoCAD의 버전을 파악해야하는 프로젝트를 진행하고 있습니다. 우리는 여러 버전의 AutoCAD가있을 가능성을 고려하여 사용자 선택에 따라 해당 AutoCAD 버전에서 필요한 DLL을 동적으로로드해야합니다. 처음에이 프로그램은 사용 가능한 AutoCAD 버전을 발견하여이를 사용자에게 보여줍니다. 그런 다음 특정 버전을 선택한 후 프로그램은 accoremgd.dll, acdbmgd.dll, acmgd.dll과 같은 DLL을 프로그램 디렉토리에 복사합니다.동적으로 AutoCAD dll을로드하는 중 예외가 발생했습니다.
Could not load file or assembly 'accoremgd.dll' or one of its dependencies. The specified module could not be found.
스택 트레이스 :
이동적으로 파일을로드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);
}
나는 내가 그 동적으로 DLL로드하려고 할 때, 그것은 오류 다음 보여줍니다 문제가 DLL의 종속성과 관련이 있다고 생각하십시오. 무엇을해야합니까? 어떤 문서 나 자료가 있습니까?
업데이트 : 프로그램의 대상 프레임 워크가 4.0이고 플랫폼 대상이 모든 CPU입니다.
나는 fuselogvw.exe를 실행했으며 내 문제에 대한 단서가 될 수 있다고 생각합니다. 나는 여기서 무슨 일이 일어나고 있는지 잘 모르겠다. 나는 그림을 추가했다. 그것을 분명히하면 큰 도움이 될 것입니다.
"Fusion Log Viewer"(fuslogvw.exe)를 사용하여 바인딩 오류 (또는 필 요할 경우 [this] (http://stackoverflow.com/a/16049933/21567))의 로깅을 활성화하십시오. –