I am working on a continuous integration system for both .Net and VB6 applications using Subversion, CruiseControl, NAnt and Ivy.
The .Net side of things isn't too much of a problem, but I need a little guidance with the VB6 side of things, more from the 'DLL-hell' side of things!
My current set-up is getting all dependent files for my VB6 system, as expected and builds the various projects within ok. BUT... it's using DLLs that are already registered on my PC, and not those within my Lib folder, which is where I am resolving my dependencies from Ivy.
I can get around this problem by registering the downloaded DLLs after Ivy has resolved them, which means that the project file can be pointed at the local Lib folder; but I want my NAnt script to do this automatically, and then automatically un-register them after the build process has completed, so that the next project in-turn can do the same thing.
What I think I need help with, is the ability to have Ivy give me a list of the project's dependencies...
For example, if I am building Project X, which depends on projects A, B and C, then if I could issue a command to Ivy that would give back a list such as A, B, C then I can pass these to another Target process to register/unregister them in turn...
Does this make sense? Is this possible and am I looking at this in the right way? Or is there a better way?
My apologies is I have gone right around the houses to explain this...!!
We keep project references in separate REF files next to our VBP files and we are using custom tool to "fix" VBPs during compile. Our build process is greatly inspired by this page (The Way We Work) and our REF files are direct rip-off of the structure he is describing.
From The Way We Work you can follow a link to L.J. Johnson's Take Control of Your Build Cycle for a utility that does the same "fix" without external files.
Basicly the fix has to use tlbinfo to extract LIBID from the executable (OCX/DLL) and completely replace the guid of the reference in the VBP file. Once this not so complicated procedure is used, it doesn't matter if you are using binary or project compatibility for your projects. Also, if doing full builds none of the previous OCX/DLL has to be registered.
Visual Build Pro is recommended in this answer. The other answers are worth a look too.
I have found the answer to this myself;
Instead of using Ivy to try to generate a list of dependencies for me on-demand, I thought I'd use the file-system to give me that same list, as Ivy has done it's job in resolving the dependencies for me, resulting in a 'lib' folder full of .dll files...
All I have done, is get a list of the .dll files within that lib folder, store them in a property (variable) and then cycle back through that same property registering/unregistering as need be.
Simple really..!
来源:https://stackoverflow.com/questions/1226730/using-nant-and-ivy-to-build-a-vb6-project