* Runtime has again been reduced by a factor of about 5. This was necessary for our application, which yields about 2 million dependencies from its .IL files. The speedup is achieved by using special checkers for rules following certain patterns. For example, a rule My.Name.Space.MyClass ---> ** need not evaluate the right hand side of a dependency at all; and for the left hand side, a simple StartsWith is sufficient, instead of a full regular expression check. There are now about 9 heuristics for faster comparisons of common "rule patterns". For our project, this reduces the runtime from around 50 minutes to about 10 minutes. (Another speedup betwwen 2 and 3 can be expected with a migration to ANTLR 3; however, ANTLR 3 no longer supports the ! operator in lexer grammars, which makes migration harder than expected).
* DLL and EXE files can directly be passed to ILDASMDC. Internally, ILDASMDC will look for the registry keys HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\sdkInstallRootv2.0 and HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\sdkInstallRootv3.0, append \bin to it and try to run ILDASM.EXE from the resulting directories with options /NOBAR /UTF8 /QUOTE /LINE /OUT=.... With this feature, use of ildasm.bat is discouraged.
* The /r flag will now run dependency checking on an input file (IL, DLL, or EXE) only if it has changed since the last checker run. The information is stored as an empty file called ILDASMDCTouch#.tmp, where # is a hash code of the file's name. Currently, these "touch files" are never deleted and produce garbage in the temp folder.
* ILDASM is buggy in that it sometimes fills arbitrary binary garbage characters into the filename behind .line directives. Because of this, ILDASMDC now accepts almost everything inside names, i.e. between quotes.
* ILDASM is buggy in that it writes 16-bit unicode characters even if passed the /UTF8 option. Therefore, ILDASMDC now tries to read a file first with Encoding.UTF8, but then also with Encoding.Unicode if the former fails.
Instead of reading all dependencies up-front (which kills memory in our project), there's now a pipeline in place so that only the dependencies of one file are in memory. This requires double reading if graphing is done, but it is now possible to read arbitrarily large projects (all of .Net, for example ;-) ) and is still faster, as memory comsumption is lower.
Version 0.97 is only a tiny upgrade - it allows wildcards on the command line of ildasmdc's exe. We use this in an MSBuild script - an MSBuild task is still missing.
Version 0.96 corrects a syntactical bug in the BAT file.
More important, it delivers a huge performance boost by about a factor of 100: Now, 600000 dependencies (resulting from about 300000 LOC) are checked in about 90 secs against about 60 rules, which result in about 950 regular expressions.
This makes it finally possible to use ILDASMDC in continuous integration builds it large-scale projects.
The following changes have been made:
# Added ---? operator for questionable dependencies. This helps in large projects to distinguish wanted from "just accepted" dependency rules.
# I tried to make it faster with specialized rules - did not seem to work. I'll have to work on the performance more.
# Repaired a parsing bug for explicit interface implementations.
# ILDASMDC now requires UTF8 input; ildasmdc.bat therefore provides UTF8 IL files.
Version 0.93 has now been released.
Unfortunately, due to sourceforge troubles, the documentation on the website is still 0.92 - please see the download for the correct documentation.
0.93 provides the following:
* Added macros for use in a larger project (about 20 developers/100 developer-months up to now), with a 4-tiered and modularized architecture on top of a large framework. Here is an excerpt from the documentation:... read more
While using ILDASMDC on a large project (15+ developers), I found that I needed to copy-paste long patterns quite often. 0.92 now has a feature to define abbreviations, e.g. ALL := MyCompany.MyProduct.**.
Item 5. on open-item list is now solved.
This is the first published version and is considered a beta release. The homepage (which includes documentation and sort of tutorials) can be found at http://ildasmdc.sourceforge.net.
ILDASM-DC is a simple, yet powerful tool to keep the static architecture of .NET projects maintainable over their whole lifetime.
A first version of ILDASM-DC (or "ILDepend" - this would probably be a better name) is complete locally; I will put it up onto SourceForge next weekend (Feb 18th/19th).
At this time, I will also post
- a first small homepage
- a small tutorial which shows how to understand, check, and graphically display the internal dependencies of Microsoft's Enterprise Library (version January 2006).