Debuggen met Express Edition
Het verschil tussen Visual Studio en de Express Edition is onder andere dat je niet kunt instellen dat je wilt debuggen in een programma zoals AutoCAD. Toch is het mogelijk en nog vrij simpel ook.
Na het aanmaken van een project zal er een mappenstructuur worden gemaakt en in de projectmap zal een bestand staan als projectnaam.vbproj.user. Dit betreft een XML-bestand en bevat de volgende regel:
<Project xmlns="<a href="http://schemas.microsoft.com/developer/msbuild/2003"> http://schemas.microsoft.com/developer/msbuild/2003</a>" />
Vervang de inhoud door dit:
<Project xmlns="<a href="http://schemas.microsoft.com/developer/msbuild/2003"> http://schemas.microsoft.com/developer/msbuild/2003</a>"> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <StartAction>Program</StartAction> <StartProgram>C:\Program Files\AutoCAD 2010\acad.exe</StartProgram> <StartWorkingDirectory>C:\Program Files\AutoCAD 2010\</StartWorkingDirectory> </PropertyGroup> </Project>
Na het opnieuw opstarten van de Express Edition zal het mogelijk zijn om het project te debuggen in AutoCAD. Na het drukken op F5 start AutoCAD op waarna met het commando NETLOAD het programma kan worden ingeladen. Alle debug functionaliteit is nu aanwezig.
Ik heb een hele mooie Class1.vb gemaakt naar het voorbeeld van Stephen Preston (Autodesk Inc):
Imports Autodesk.AutoCAD.Runtime Imports Autodesk.AutoCAD.ApplicationServices Imports Autodesk.AutoCAD.DatabaseServices Public Class Class1 <CommandMethod("HelloWorld")> _ Public Sub MyMethod() Application.ShowAlertDialog("Hello World from VB.NET!") End Sub End ClassHierna heb ik de "Test20100518.vbproj.user" aangepast en zie er nu zo uit volgens het voorbeeld van deze site:
<?xml version="1.0" encoding="utf-8"?> <Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' "> <StartAction>Program</StartAction> <StartProgram>C:\Program Files\AutoCAD 2010\acad.exe</StartProgram> <StartWorkingDirectory>C:\Program Files\AutoCAD 2010\</StartWorkingDirectory> <ProjectView>ShowAllFiles</ProjectView> </PropertyGroup> </Project>Na het bovenstaande toegepast te hebben in MS VB 2010 Express, druk ik F5 en Acad 2010 start,
dan het commando "NETLOAD" en krijg ik de volgende melding:
Command: NETLOAD
Cannot load assembly. Error details: System.BadImageFormatException: Could not
load file or assembly 'file:///U:\Visual Studio
2010\Projects\Test20100518\Test20100518\bin\Debug\Test20100518.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:///U:\Visual Studio
2010\Projects\Test20100518\Test20100518\bin\Debug\Test20100518.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].
Vervolgens heb ik geen nieuw commando: "HelloWorld"
Wat doe ik niet goed of wat is er mis?
Ik ben nog wat aan het zoeken geweest en heb een oplossing gevonden:
In de Solution Explorer met rechts klikken en kies properties...
In het venster war volgt kun je op het tabblad "Compile" klikken...
Hier kies je (onderaan) de knop [Advanced Compile Options...]
Onderin het venster wat verschijnt zie je "Target framework (all configurations):"
Kies hier ".NET Framework 2.0"
Dat was mijn oplossing, overigens samen met het bovenstaande (projectnaam.vbproj.user aanpassen)
Mooi dat je de oplossing gevonden hebt!
Wat ik nu net ontdek is dat als ik een breakpoint zet in de code dat daar niet gestopt wordt.
Met F5 (of F8) start ik de debug, Acad2010 start op en doe netjes NETLOAD en geef het commando wat ik gemaakt heb waarna Acad het programma ook afwerkt.
Ik kan nu in Acad2010 mijn .dll laden en uitvoeren maar nog niet debuggen, waar het mij nu om gaat.
Ik gebruik "MS VB 2010 Express"
Je moet heel zeker weten dat het project dat je debugged, ook gebruikt in AutoCAD, en niet per ongeluk de Release versie inleest.
Ik heb alle versies gebruikt met hetzelfde resultaat.
Een paar dagen later (waarschijnlijk na een update van MS) kreeg ik een melding dat er iets van .NET Framework 2.0 gemist werd.
Toen heb ik .NET Framework 3.x gebruikt ging het wel weer met als resultaat dat "HelloWorld" wel werkte maar een simpele code uit de help van Acad2010 resulteerde in een "FATALERROR"