Mixin cross-referencing tool

Based on a novel by Patrick Größ


The mixin cross referencer ("MixinXRef") is a tool for generating a browsable report (HTML). The report aids understanding of large architectures that use many mixins.

The source can be found in the re-motion contribution GitHub

Using MixinXRef

MixinXRef assembly-directory output-directory [custom-remotion-reflector-qualified-name]
  • The assembly directory contains the assemblies for analysis; all dependencies must resolve.
  • If pages already exist in the output directory, MixinXRef asks for confirmation for overwriting these files
  • A custom remotion reflector is an implementation for an IRemotionReflector, i.e. a module for interpreting the mixin configuration. You won't need this unless the current API for mixin discovery changes or you change it for your project.

The directory xml_utilities must exist in the same directory where MixinXRef.exe is located. The xml_utilities contains XSLT style-sheets, the saxon XSLT processor and the resources directory (for .css, Javascript, pictures).

How it works

MixinXRef loads the assemblies for analysis via .NET reflection and generates an XML document. MixinXRef uses XSLT 2.0 for transforming that XML document to HTML pages.

Technologies, dependencies

  • .NET reflection and mixin reflection (re-mix)
  • LINQ to XML
  • XSLT 20.0 (Saxon XSLT processor)
  • JavaScript, JQuery (tablesorter, tablepager, cookies, etc.)

Adapting MixinXRef

Configuring XML formatting

The interface MixinXRef.Formatting.IOutputFormatter controls output of "modifiers" for types and their members, as well as "signatures" for members. The output formatter currently in use lovingly renders signatures, i.e. type names, highlighting and usage of C# aliases.

New re-motion version

You can use MixinXRef for projects with various versions of re-motion – for as long as the mixin reflection API does not change. As soon as it DOES change, you must adapt MixinXRef.Reflection.Remotion.IRemotionReflector accordingly. What's more, the RemotionReflectorFactory.DetectVersion ()
must return an appropriate instance. The alternative is to drop in an IRemotionReflector implementation with the third, optional,
custom-remotion-reflector-assembly-qualified-name (see above, Using MixinXRef).

Happy mixin surfing