I previously asked: Add dll reference to visual studio macros
the idea of creating the macros in my language (C#) makes it easier to create the macros. The problem is that I cannot debug the dll
To solve the problem I have tried:
I placed
myClassLibrary.pdb
next tomyClassLibrary.dll
hoping I where going to be able to debug the methods in the dll by steping in to them.Created a WCF service. Because I did not knew how to reference the service from vba I reference it from the class library. The problem is that I need to use variables such as
DTE.ActiveDocument
and those variables are not serializable meaning I could not pass them to the wcf service.
the idea of working in C# is very nice but not being able to debug and see what is going on makes it somewhat difficult. I might have to go to my older option where I created my code on C# compiled then decompiled into vba with reflector.
Edit
I think I am close on getting a solution. I thought why not create the macro in a console application? I am able to get the active document text but not able to change it.
EnvDTE80.DTE2 MyDte;
MyDte = (EnvDTE80.DTE2)System.Runtime.InteropServices.Marshal.GetActiveObject( "VisualStudio.DTE.10.0" );
Console.WriteLine( "The Edition is " + MyDte.Edition );
Console.ReadLine( );
// write to the console the text that is selected. "sometimes it does not work don't know why"
Console.WriteLine(
MyDte.ActiveDocument.Selection.Text
);
note I added the following references plus the onces that vba macros have:
I have yet another answer which is even better!
The only reason why I created the addin is because I needed a reference of the DTE. Why not reference the dte that I need.
The the algorithm is as follow:
Use class
Ide
to get the DTE of whatever instance of visual studio.Once you have that dte create the macro.
Here is the Ide class:
then if I have an instance of visual studio runing that contains a solution with the name
ConsoleApp1
then I will be able to do:and the text
My macro is working!
will be inserted in the active document. make sure there is an active document though