対象のコンピュータにインストールされている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.
はの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);
}
私はしかし、私はそれらを動的に、それは次のエラーを示してDLLをロードしようとすると、問題がDLLの依存関係にあるかもしれないと考えてください。何をすべきか?利用可能な書類がありますか?
更新: プログラムのターゲットフレームワークは4.0で、プラットフォームターゲットは任意のCPUです。
私はfuselogvw.exeを実行しました。私はここで私の問題の手がかりになるかもしれないと思います。私はここで何が起こっているのか分かりませんので、私は写真を追加しました。それを明らかにするなら、大きな助けになるでしょう。
「Fusion Log Viewer」(fuslogvw.exe)を使用して、バインディングエラー(必要な場合は[this](http://stackoverflow.com/a/16049933/21567))のログを有効にします。 –