Đến nội dung


Hình ảnh
- - - - -

Khắc phục lỗi "System.BadImageFormatException" khi load *.dll trong Autocad


  • Please log in to reply
4 replies to this topic

#1 nvson

nvson

    biết vẽ ellipse

  • Members
  • PipPip
  • 52 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 14 December 2011 - 08:39 AM

Nhờ các bác giúp tôi khắc phục lỗi này với:
Tôi làm trên VSTO 2010 và AutoCad 2011; trình tự như sau:
  • Trong VSTO 2010, File/ New Project/ Class Library, sau đó References tới 2 file AcDbMgd.dll và AcMgd.dll trong thư mục C:\Program Files\Autodesk\AutoCAD 2011
  • Rồi chèn thử 1 đoạn code như sau;

Imports Autodesk.AutoCAD.Runtime
Imports Autodesk.AutoCAD.ApplicationServices
Imports Autodesk.AutoCAD.EditorInput
Public Class Class1
<CommandMethod("myCommand")> _
Public Sub myRoutine()
'Access the AutoCAD Editor
Dim ed As Editor = Application. _
DocumentManager. _
MdiActiveDocument. _
Editor
'Write a simple message
ed.WriteMessage("My Hello World")
End Sub
End Class

  • Sau đó Biên dịch ra file *.dll.
  • Vào Autocad, đánh lệnh NETLOAD để load file *.dll trên, nhưng bị lỗi như sau:

Command: netload
Cannot load assembly. Error details: System.BadImageFormatException: Could not
load file or assembly 'file:///D:\MyHello\MyHello\bin\Debug\MyHello.dll' or one
of its dependencies. This assembly is built by a runtime newer than the
currently loaded runtime and cannot be loaded.
File name: 'file:///D:\MyHello\MyHello\bin\Debug\MyHello.dll'
at System.Reflection.Assembly._nLoad(AssemblyName fileName, String codeBase,
Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,
Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.nLoad(AssemblyName fileName, String codeBase,
Evidence assemblySecurity, Assembly locationHint, StackCrawlMark& stackMark,
Boolean throwOnFileNotFound, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoad(AssemblyName assemblyRef,
Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection)
at System.Reflection.Assembly.InternalLoadFrom(String assemblyFile, Evidence
securityEvidence, Byte[] hashValue, AssemblyHashAlgorithm hashAlgorithm,
Boolean forIntrospection, StackCrawlMark& stackMark)
at System.Reflection.Assembly.LoadFrom(String assemblyFile)
at Autodesk.AutoCAD.Runtime.ExtensionLoader.Load(String fileName)
at loadmgd()
WRN: Assembly binding logging is turned OFF.
To enable assembly bind failure logging, set the registry value
[HKLM\Software\Microsoft\Fusion!EnableLog] (DWORD) to 1.
Note: There is some performance penalty associated with assembly bind failure
logging.
To turn this feature off, remove the registry value
[HKLM\Software\Microsoft\Fusion!EnableLog].

.
Mong các bác chỉ giúp.
Thanks so much
  • 0

#2 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 14 December 2011 - 10:01 AM

Bạn dùng Visual studio 2008 nha, AutoCAD chưa hỗ trợ cho VSTO 2010.
Good luck!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#3 nvson

nvson

    biết vẽ ellipse

  • Members
  • PipPip
  • 52 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 14 December 2011 - 10:13 AM

OK.
Xin cảm ơn bạn nhiều

Nhân tiện anh cho hỏi nếu dùng kiểu Class Library, sau đó Add References 2 files AcDbMgd.dll và AcMgd.dll trong thư mục C:\Program Files\Autodesk\AutoCAD 2011 thì sau khi biên dịch ra *.dll, file *.dll có chạy được trên tất các các phiên bản của AutoCad không?
  • 0

#4 Detailing

Detailing

    biết lệnh imageclip

  • Members
  • PipPipPipPipPipPipPip
  • 667 Bài viết
Điểm đánh giá: 278 (khá)

Đã gửi 14 December 2011 - 01:15 PM

OK.
Xin cảm ơn bạn nhiều

Nhân tiện anh cho hỏi nếu dùng kiểu Class Library, sau đó Add References 2 files AcDbMgd.dll và AcMgd.dll trong thư mục C:\Program Files\Autodesk\AutoCAD 2011 thì sau khi biên dịch ra *.dll, file *.dll có chạy được trên tất các các phiên bản của AutoCad không?

Chạy dc với tất cả các phiên bản khác với điều kiện các properties/method mà bạn sử dụng phải có trong phiên bản của dll của chương trình AutoCAD mà bạn load ASM của bạn vào.

p/s: để chắc ăn các bạn có thể reference từng phiên bản của Acmgd và acdbmgd vào project và rebuild lại nếu ko có error thì nó work!
Good luck!
  • 0

Ideas don't matter, execution does!

1908412_308002392716743_8165279281236341


#5 nvson

nvson

    biết vẽ ellipse

  • Members
  • PipPip
  • 52 Bài viết
Điểm đánh giá: 4 (bình thường)

Đã gửi 14 December 2011 - 02:57 PM

Cảm ơn bạn Detailing nhiều. Từ sáng tới giờ hì hục download bản VSTO 2008 về cài.
Đã Test thử và thành công.
Cảm ơn các bạn rất nhiều.
  • 0