1

I have the following code:

    public static void Run()
    {
        var reportPrinter = new ConsoleReportPrinter();
        var compilerSettings = new CompilerSettings();
        var compilerContext = new CompilerContext(compilerSettings, reportPrinter);

        var evaluator = new Evaluator(compilerContext);

        var loadedBefore = AppDomain.CurrentDomain.GetAssemblies();
        Assembly[] loadedAfter;
        try
        {
            var result = evaluator.Evaluate("1+2");
        }
        catch (Exception)
        {
            loadedAfter = AppDomain.CurrentDomain.GetAssemblies();
            throw;
        }
    }

This code works fine in a toy standalone project, but once I put it into my main project, the evaluator.Evaluate() calls a FileLoadException - AssemblyResolveEvent handlers cannot return Assemblies loaded for reflection only..

Unfortunately I have very little idea what is causing this, and not being very familiar with the .NET internals I have even less of an idea of how to go about diagnosing this.

My main project does have a lot of dependencies that use meta-programming of some form (NHibernate, ActiPro Syntax Editor, DevExpress, Antlr). The project itself also uses Microsoft's CodeDOM to compile and execute user scripts (in the same AppDomain - and yes I am aware of issues). And I did get the same exception in the past - it was fixed by scrubbing my library files and copying them from a fellow developer again. We never got to the bottom of that. I'm not sure if that points to some sort of versioning mismatch between dependencies?

Anyway, the loadedBefore variable at the time of the exception throw is identical to loadedAfter. It contains the following:

{mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
{Microsoft.VisualStudio.HostingProcess.Utilities, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a}
{System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
{System.Drawing, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a}
{System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
{Microsoft.VisualStudio.HostingProcess.Utilities.Sync, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a}
{Microsoft.VisualStudio.Debugger.Runtime, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a}
{vshost, Version=10.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a}
{PresentationCore, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35}
{WindowsBase, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35}
{System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a}
{System.Core, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
{System.Design, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a}
[INTERNAL LIBRARY REDACTED]
[INTERNAL LIBRARY REDACTED]
{DevExpress.Utils.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
{DevExpress.XtraBars.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
{DevExpress.XtraEditors.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
{DevExpress.Data.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
[INTERNAL LIBRARY REDACTED]
{System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
{log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821}
{System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
[INTERNAL LIBRARY REDACTED]
[INTERNAL LIBRARY REDACTED]
{NHibernate, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4}
{FluentNHibernate, Version=1.1.0.685, Culture=neutral, PublicKeyToken=8aa435e3cb308880}
{Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4}
{System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
{System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a}
{DevExpress.XtraGrid.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
[INTERNAL LIBRARY REDACTED]
[INTERNAL LIBRARY REDACTED]
[INTERNAL LIBRARY REDACTED]
[INTERNAL LIBRARY REDACTED]
{DevExpress.XtraCharts.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
{DevExpress.XtraVerticalGrid.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
{DevExpress.XtraTreeList.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
{NHibernate.ByteCode.Castle, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4}
{System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139}
{System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
{DevExpress.Spreadsheet.v14.1.Core, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
[INTERNAL LIBRARY REDACTED]
{Mono.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756}
{DevExpress.PivotGrid.v14.1.Core, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
{Castle.Core, Version=1.1.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc}
{OpenTK, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4}
{ActiproSoftware.SyntaxEditor.Addons.DotNet.Net20, Version=4.0.287.0, Culture=neutral, PublicKeyToken=21a821480e210563}
{WW.Cad, Version=4.0.35.116, Culture=neutral, PublicKeyToken=87d16b8f7b531b65}
{WW, Version=4.0.35.116, Culture=neutral, PublicKeyToken=87d16b8f7b531b65}
{System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a}
{System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
{ActiproSoftware.Shared.Net20, Version=1.0.104.0, Culture=neutral, PublicKeyToken=36ff2196ab5654b9}
{ActiproSoftware.SyntaxEditor.Net20, Version=4.0.287.0, Culture=neutral, PublicKeyToken=21a821480e210563}
{System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089}
{ActiproSoftware.WinUICore.Net20, Version=1.0.104.0, Culture=neutral, PublicKeyToken=1eba893a2bc55de5}
{DevExpress.XtraLayout.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
{DevExpress.XtraPivotGrid.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
{DevExpress.XtraNavBar.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a}
{System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a}
{Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null}
{UIAutomationClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35}
{Microsoft.WindowsAPICodePack.Shell, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35}
{Microsoft.WindowsAPICodePack, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35}

In addition I added the following ot the start of my Main method:

    [STAThread]
    private static void Main(string[] args)
   {
        var assemblyLoadedEventLog = "";
        AppDomain.CurrentDomain.AssemblyLoad += (sender, a) => { assemblyLoadedEventLog += DateTime.Now + " " + a.LoadedAssembly.ToString() + Environment.NewLine; };      

        ...

The assemblyLoadedEventLog then contains:

10/10/2014 4:44:51 PM log4net, Version=1.2.10.0, Culture=neutral, PublicKeyToken=1b44e1d426115821 False
10/10/2014 4:44:51 PM System.Xml.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 False
[INTERNAL LIBRARY REDACTED]
[INTERNAL LIBRARY REDACTED]
10/10/2014 4:44:51 PM NHibernate, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4 False
10/10/2014 4:44:51 PM FluentNHibernate, Version=1.1.0.685, Culture=neutral, PublicKeyToken=8aa435e3cb308880 False
10/10/2014 4:44:52 PM Iesi.Collections, Version=1.0.1.0, Culture=neutral, PublicKeyToken=aa95f207798dfdb4 False
10/10/2014 4:44:52 PM System.Data, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 False
10/10/2014 4:44:52 PM System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a False
10/10/2014 4:44:52 PM DevExpress.XtraGrid.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a False
[INTERNAL LIBRARY REDACTED]
[INTERNAL LIBRARY REDACTED]
[INTERNAL LIBRARY REDACTED]
[INTERNAL LIBRARY REDACTED]
10/10/2014 4:44:52 PM DevExpress.XtraCharts.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a False
10/10/2014 4:44:52 PM DevExpress.XtraVerticalGrid.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a False
10/10/2014 4:44:52 PM DevExpress.XtraTreeList.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a False
10/10/2014 4:44:52 PM NHibernate.ByteCode.Castle, Version=2.1.2.4000, Culture=neutral, PublicKeyToken=aa95f207798dfdb4 False
10/10/2014 4:44:52 PM System.Data.SQLite, Version=1.0.66.0, Culture=neutral, PublicKeyToken=db937bc2d44ff139 False
10/10/2014 4:44:52 PM System.Transactions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 False
10/10/2014 4:44:52 PM DevExpress.Spreadsheet.v14.1.Core, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a False
[INTERNAL LIBRARY REDACTED]
10/10/2014 4:44:52 PM Mono.CSharp, Version=4.0.0.0, Culture=neutral, PublicKeyToken=0738eb9f132ed756 False
10/10/2014 4:44:52 PM DevExpress.PivotGrid.v14.1.Core, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a False
10/10/2014 4:44:52 PM Castle.Core, Version=1.1.0.0, Culture=neutral, PublicKeyToken=407dd0808d44fbdc False
10/10/2014 4:44:52 PM OpenTK, Version=1.0.0.0, Culture=neutral, PublicKeyToken=bad199fe84eb3df4 False
10/10/2014 4:44:52 PM ActiproSoftware.SyntaxEditor.Addons.DotNet.Net20, Version=4.0.287.0, Culture=neutral, PublicKeyToken=21a821480e210563 False
10/10/2014 4:44:52 PM WW.Cad, Version=4.0.35.116, Culture=neutral, PublicKeyToken=87d16b8f7b531b65 False
10/10/2014 4:44:52 PM WW, Version=4.0.35.116, Culture=neutral, PublicKeyToken=87d16b8f7b531b65 False
10/10/2014 4:44:52 PM System.EnterpriseServices, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a False
10/10/2014 4:44:52 PM System.Numerics, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 False
10/10/2014 4:44:53 PM ActiproSoftware.Shared.Net20, Version=1.0.104.0, Culture=neutral, PublicKeyToken=36ff2196ab5654b9 False
10/10/2014 4:44:53 PM ActiproSoftware.SyntaxEditor.Net20, Version=4.0.287.0, Culture=neutral, PublicKeyToken=21a821480e210563 False
10/10/2014 4:44:54 PM ActiproSoftware.WinUICore.Net20, Version=1.0.104.0, Culture=neutral, PublicKeyToken=1eba893a2bc55de5 False
10/10/2014 4:44:54 PM System.Data.Linq, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 False
10/10/2014 4:44:54 PM DevExpress.XtraLayout.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a False
10/10/2014 4:44:55 PM DevExpress.XtraPivotGrid.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a False
10/10/2014 4:44:56 PM DevExpress.XtraNavBar.v14.1, Version=14.1.6.0, Culture=neutral, PublicKeyToken=b88d1754d700e49a False
10/10/2014 4:44:57 PM System.Management, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a False
10/10/2014 4:44:57 PM Anonymously Hosted DynamicMethods Assembly, Version=0.0.0.0, Culture=neutral, PublicKeyToken=null False
10/10/2014 4:44:59 PM UIAutomationClient, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 False
10/10/2014 4:45:02 PM Microsoft.WindowsAPICodePack.Shell, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 False
10/10/2014 4:45:02 PM Microsoft.WindowsAPICodePack, Version=1.1.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35 False
10/10/2014 4:45:13 PM System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 True

The puzzling thing (for me) is the bottom entry - why on earth is the System assembly being loaded in Reflection Only context here? Is this some cross-appdomain confounding?

fostandy
  • 4,282
  • 4
  • 37
  • 41

0 Answers0