Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 为什么Mono的Evaluator.Evaluate()会导致FileLoadException-AssemblyResolveEvent处理程序无法返回仅为反射而加载的程序集?_C#_Mono_Assembly Resolution - Fatal编程技术网

C# 为什么Mono的Evaluator.Evaluate()会导致FileLoadException-AssemblyResolveEvent处理程序无法返回仅为反射而加载的程序集?

C# 为什么Mono的Evaluator.Evaluate()会导致FileLoadException-AssemblyResolveEvent处理程序无法返回仅为反射而加载的程序集?,c#,mono,assembly-resolution,C#,Mono,Assembly Resolution,我有以下代码: public static void Run() { var reportPrinter = new ConsoleReportPrinter(); var compilerSettings = new CompilerSettings(); var compilerContext = new CompilerContext(compilerSettings, reportPrinter); var

我有以下代码:

    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;
        }
    }
此代码在toy独立项目中运行良好,但一旦我将其放入主项目中,evaluator.Evaluate将调用FileLoadException-AssemblyResolveEvent处理程序无法返回仅为反射而加载的程序集

不幸的是,我对造成这种情况的原因知之甚少,而且由于不太熟悉.NET的内部结构,我对如何诊断这种情况的想法甚至更少

我的主要项目确实有很多依赖项,它们使用某种形式的元编程NHibernate、ActiPro语法编辑器、DevExpress、Antlr。该项目本身也使用Microsoft的CodeDOM在同一AppDomain中编译和执行用户脚本——是的,我知道存在一些问题。我在过去也遇到过同样的例外情况——它是通过清理我的库文件并再次从其他开发人员那里复制来修复的。我们一直没有弄清那件事的真相。我不确定这是否表明依赖项之间存在某种版本不匹配

无论如何,引发异常时的loadedBefore变量与loadedAfter相同。它包含以下内容:

{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}
此外,我在主要方法的开头添加了以下内容:

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

        ...
然后,assemblyLoadedEventLog包含:

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
对我来说,最令人费解的事情是底部条目——究竟为什么系统程序集要在这里仅在反射上下文中加载?这是跨应用程序域的混淆吗