Gonna go ahead and apologize if someone has written something like this already. I did some googling, pinged JammyKam (which means if he doesn’t know about it, it doesn’t exist), and alas, nothing.

The Problem

During a new site setup, I was clocking along, minding my own business, when I got a nasty error about some assembly load:

Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.

Well that sucks.  How about a stack trace!

[ReflectionTypeLoadException: Unable to load one or more of the requested types. Retrieve the LoaderExceptions property for more information.]
System.Reflection.RuntimeModule.GetTypes(RuntimeModule module) +0
System.Reflection.Assembly.GetTypes() +113
RazorGenerator.Mvc.PrecompiledViewAssembly.GetTypeMappings() +24
Sitecore.Mvc.ViewEngineRegistration.PrecompiledViewAssemblyBuilder(Assembly assembly, Boolean usePhysicalViewsIfNewer) +114
System.Linq.WhereSelectEnumerableIterator`2.MoveNext() +223
System.Linq.Buffer`1..ctor(IEnumerable`1 source) +162
System.Linq.Enumerable.ToArray(IEnumerable`1 source) +106
Sitecore.Mvc.ViewEngineRegistration.RegisterViewEngine() +373
Sitecore.Mvc.Pipelines.Loader.InitializeRoutes.RegisterRazorViewEngine() +296
Sitecore.Mvc.Pipelines.Loader.InitializeRoutes.RegisterRoutes(RouteCollection routes, PipelineArgs args) +414
Sitecore.Mvc.Pipelines.Loader.InitializeRoutes.Process(PipelineArgs args) +109
(Object , Object[] ) +74
Sitecore.Pipelines.CorePipeline.Run(PipelineArgs args) +479
Sitecore.Pipelines.DefaultCorePipelineManager.Run(String pipelineName, PipelineArgs args, String pipelineDomain) +22
Sitecore.Nexus.Web.HttpModule.Application_Start() +288
Sitecore.Nexus.Web.HttpModule.Init(HttpApplication app) +673
System.Web.HttpApplication.RegisterEventSubscriptionsWithIIS(IntPtr appContext, HttpContext context, MethodInfo[] handlers) +583
System.Web.HttpApplication.InitSpecial(HttpApplicationState state, MethodInfo[] handlers, IntPtr appContext, HttpContext context) +169
System.Web.HttpApplicationFactory.GetSpecialApplicationInstance(IntPtr appContext, HttpContext context) +396
System.Web.Hosting.PipelineRuntime.InitializeApplication(IntPtr appContext) +333

Not so much on the helpful front.  I’d love to be able to inject some error handling in Sitecore’s pipelines, but that’s not so easy.  After some screwing around, I finally realized I had used a 9.0 version of the Sitecore.MVC.dll, rather than the Sitecore 8.2 update 6 version.  Nuget fail.  Wonk wonk!

A Solution

I know there had been circulating an excel sheet that had the latest assembly versions in it, which was super helpful if you knew the version you had and wanted to check it.  If you wanted to verify all the assemblies in an install…you’re gonna be in for a world of hurt.

With that in mind, I figured it would be nice to be able to see at a glance all the assemblies in your bin, and how they compare to a fresh install of that version.

Enter the Sitecore Assembly Version Checker (AVC).  It comes in two flavors:  Web and Powershell.  For the web version, you just drop the aspx in the sitecore/admin folder.  For the powershell version, you unzip the ps1 and the manifest in the sitecore admin folder.  Could you run these directly from the bin folder? Sure. Why though?

What’s it do?

It’s pretty straight forward. I built manifests (or better yet, I wrote an app that builds a manifest) of all the dll files in the Sitecore packages directly off SDN.  This gives a vanilla baseline that you can use to run a File Version compare against to see which are out of date or the incorrect version. That’s about it.  This was a feel-good project for me, so download it and feel good.

Usage

For the ASPX, you can invoke it by hitting the following URL: /sitecore/admin/AssemblyVersionChecker.aspx?v=VERSION

You can use the following Versions with AVC: 8.1.0 – 8.1.3, 8.2.0 – 8.2.6, 9.0.0 and 9.0.1.  So if you wanted to check your install against Sitecore 8.2 Update 4, you’d run http://SITE/sitecore/admin/AssemblyVersionChecker.aspx?v=8.2.4

A quick screen grab of the output from the ASPX:

For the PS version, invoke it via command line: .\AssemblyVersionChecker.ps1 VERSION

Again, if you wanted to check your install against the 8.2 Update 4 manifest, you’d run .\AssemblyVersionChecker.ps1 8.2.4 from the bin folder at the PS Prompt.

(The same versions apply for both PS and ASPX)

It looks like this when it runs:

Download

Here’s the link to the aspx zip: http://www.rockpapersitecore.com/wp-content/uploads/2018/AssemblyVersionChecker.zip

Here’s the link to the Powershell: http://www.rockpapersitecore.com/wp-content/uploads/2018/AssemblyVersionChecker_Powershell.zip