C# 对象引用未设置为对象的实例。当通过网络访问但在本地工作正常时

C# 对象引用未设置为对象的实例。当通过网络访问但在本地工作正常时,c#,multithreading,dll,nullreferenceexception,C#,Multithreading,Dll,Nullreferenceexception,我有一个我似乎无法解决的问题,我正在旋转我的轮子…我有一个作为一个整体构建的项目(C#多线程windows应用程序),我的任务是分解各个组件以打破相互依赖。现在所有的组件都被分解了,我正在测试和调试我提出的问题,然后再将其发布给QA。这是(希望)最后一期: 当我运行主组件时,它接受了一个要处理的任务,它实例化了运行时组件(.DLL),而运行时组件又实例化了一个程序集(data acquisition.DLL)。程序集(data acquisition.DLL)是围绕控制其功能的基本组件构建的。程

我有一个我似乎无法解决的问题,我正在旋转我的轮子…我有一个作为一个整体构建的项目(C#多线程windows应用程序),我的任务是分解各个组件以打破相互依赖。现在所有的组件都被分解了,我正在测试和调试我提出的问题,然后再将其发布给QA。这是(希望)最后一期:

当我运行主组件时,它接受了一个要处理的任务,它实例化了运行时组件(.DLL),而运行时组件又实例化了一个程序集(data acquisition.DLL)。程序集(data acquisition.DLL)是围绕控制其功能的基本组件构建的。程序集被编译并存储在网络上,并从网络上访问,因为网络上的不同机器上运行着主组件的多个实例。当我试图访问其“目录”中的程序集时,我得到一个“对象引用未设置为对象的实例”。…但是…当我运行本地复制的相同程序集时,它运行正常

我不明白为什么它在本地运行,而不是在网络上运行。我想不出我丢失的参考资料在哪里…请帮忙

希望我已经对这个问题进行了足够详细的描述,可以提供一些指导,如果您需要更多详细信息,请告诉我

编辑:包括代码片段和日志文件片段

以下是发生问题的代码部分:

string assemblyName  = moduleName;
        _log.LogMessage("DACLRuntime assemblyName: " + assemblyName);
        Assembly dacAssembly = Assembly.LoadFrom(assemblyName);
        moduleName           = Path.GetFileNameWithoutExtension(assemblyName);
        _log.LogMessage("DACLRuntime moduleName: " + moduleName);
        var dacType          = (from c in dacAssembly.GetTypes() where c.Name.EqualsIgnoreCase(moduleName) select c).First();
        _log.LogMessage("DACLRuntime dacType: " + dacType.ToString());

        if (dacType != null)
        {
            _log.LogMessage("DACLRuntime Instansiate the DACBase...");
            DACBase dac    = (DACBase)Activator.CreateInstance(dacType);
            _log.LogMessage("DACLRuntime DACBase is instantiated...");
            dac.gsDACLPath = Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
            _log.LogMessage("DACBase path is: " + dac.gsDACLPath);

            try
            {
                // -- Does the script exist...
                if (File.Exists(assemblyName))
                    _log.LogMessage("Script located at ==> " + assemblyName + " <==  Exists.");
                _log.LogMessage("Script Started:" + assemblyName + " orderid:" + orderId);
                dac.iPid = iPid;
                _log.LogMessage("    dac.iPid = " + iPid.ToString());
                _log.LogMessage("    Calling dac.InitAndExecute()...Passing the OrderId and the RunTime Log file (_log)...");
                dac.InitAndExecute(orderId, _log);
                _log.LogMessage("    Call to dac.InitAndExecute() sucessful...");
            }
            catch (IndexOutOfRangeException)
            {
                // Coded As per ZAM to raise error 17 if it is index out of bounds
                dac.Frame.Error = 17;
                _log.LogInformation("Index was outside the bounds of the array For " + assemblyName + " orderid:" + orderId);
            }
解决了我的问题

我从使用Assembly.LoadFrom()切换到将完全限定路径传递到Assembly.Load()并传递dll的bite数组

_log.LogMessage("DACLRuntime assemblyName: " + assemblyName);
//Assembly dacsembly=Assembly.LoadFrom(assemblyName)


在回答以下问题时偶然发现了这一点:

请显示您的代码。在调试器中运行不会显示“对象引用未设置为对象实例”错误发生的位置吗?请显示引发异常的代码部分。我们不是千里眼。几乎所有的
NullReferenceException
案例都是一样的。请参阅“”以获得一些提示。不幸的是,我没有足够的声誉投票支持从transistor1得到的关于另一个问题的答案。只是想说声谢谢!!!
protected virtual void Initialize()
    {
        // - - -  Initialize Logging for the application - - -
        if (_log == null)
        {
            _log = new Logger("DACLRuntime.Log", 7);
            _log.LogMessage("DACLRuntime Logging being used...");
        }
        _log.LogMessage("DACLBase Initializing..." + DateTime.Now.ToString());

        // -- Initialize the sub-components...
        _log.LogMessage("   CommonFunctions (CF) Initializing...");
        if (CF == null) CF       = new CommonFunctions(this);
        _log.LogMessage("   CommonRoutiness (CR) Initializing...");
        if (CR == null) CR       = new CommonRoutines(this);
        _log.LogMessage("   DACFrame (Frame) Initializing...");
        if (Frame == null) Frame = new DACFrame();
        _log.LogMessage("   DBExtn (FSHDB) Initializing...");
        if (FSDBH == null) FSDBH = new DBExtn();

        // -- Log the DB initialization...
        _log.LogMessage("DACL Database (FSDBH) Connected: " + FSDBH.ADOConnect("FS2000").ToString());
        _log.LogMessage("[DEBUGGING] ::: DACLBase :: Initialize : ZDVR Set as:" + gsDACLPath);
    }

    protected abstract void Main(params object[] parameters);

    public void InitAndExecute(params object[] args)
    {
        // -- Debugging...
        if (args != null && args.Length > 0)
        {
            _log = (Logger)args[1];
            _log.LogMessage("DACLRuntime Logging Passed in...");
            _log.LogMessage(_log.CurrentLogFile);
        }

        _log.LogMessage("Calling the Initialize()...");
        Initialize();

        _log.LogMessage("[DEBUGGING] ::: DACLBase :: InitAndExecute : Setting the OrderId...");

        if (args != null && args.Length > 0)
            if (args[0].ToString().Trim().Length == 12)
                OrderId = args[0].ToString();

        // -- Debugging...
        _log.LogMessage("[DEBUGGING] ::: DACLBase :: InitAndExecute : Entering Script...");

        Main(args);
    }
_log.LogMessage("DACLRuntime assemblyName: " + assemblyName);
        string sAssFile      = assemblyName;
        byte[] AssmBytes     = File.ReadAllBytes(sAssFile);
        Assembly dacAssembly = Assembly.Load(AssmBytes);

        moduleName           = Path.GetFileNameWithoutExtension(assemblyName);