【问题标题】:Could not load file or assembly System.IO.FileNotFoundException无法加载文件或程序集 System.IO.FileNotFoundException
【发布时间】:2013-04-02 14:55:12
【问题描述】:

我正在开发的应用程序是一个简单的远程聊天应用程序。

当我尝试运行我的应用程序时遇到此异常。当它谈到加载文件或程序集时,我真的不明白。

“System.Reflection.TargetInvocationException: 调用目标抛出异常。---> System.IO.FileNotFoundException: 无法加载文件或程序集'Client, Version=1.0.0.0”

try
{
   gt = (Greeting)Activator.GetObject(typeof(Greeting), "tcp://Localhost:7189/Greeting");
   handler = new MessageHandler(OnReceive);
   gt.Sender += handler;
}
catch(Exception ex)
{
   textBox2.Text = ex.ToString();
}

在这一行抛出这个异常

gt.Sender += handler;

下面是我的问候课。

[Serializable]
public delegate void MessageHandler(string mymsg);
public class Greeting:MarshalByRefObject
{
    public event MessageHandler Sender;

    public override object InitializeLifetimeService()
    {
        return null;
    }

    public Greeting()
    {
    }

    public void postGreeting(string msg)
    {
        if (Sender != null)
        {
            Sender(msg);
        }
    }
}

【问题讨论】:

  • MessageHandler 在客户端程序集中吗?该程序集是否已加载到 BIN/GAC 中? .NET 在首次调用引用的程序集之前不会加载它们,因此这可能是您的问题的根源。
  • Greeting 类内部发生异常。您将不得不调试/探索该对象。似乎其中的一个方法可能需要一个日志文件或位于您机器上不可用的路径的东西。
  • @FrazellThomas 我是 Remoting 的新手,我不知道如何检查程序集是否已加载到 BIN/GAC 中。也许您可以建议将这个程序集加载到 BIN/GAC 中的方法。
  • @PrahladYeri 我有点明白你在说什么,但不清楚。我可以发布我的 Greetings 课程,所以请看一下。
  • 我肯定会看一下 Greetings 类,但最好的方法是调试它。你不能将包含 Greetings 类的解决方案添加到你的解决方案中,并在 Visual Studio 中调试它吗?

标签: c# remoting


【解决方案1】:

我假设处理程序是在您的客户端程序集中创建的?当您订阅 Greetings.Sender 事件时,对处理程序的引用将传递给您的服务器程序集。作为服务器端反序列化的一部分,它必须解析处理程序类型。由于它位于客户端程序集中,因此服务器程序集必须可以访问它。

将所有程序集构建到一个共享的调试或发布文件夹中,然后重试。

【讨论】:

    【解决方案2】:

    使用 microsoft sysinternals 进程监视器,配置该工具来监视您的应用程序的所有文件访问操作,然后您可以看到您的进程试图访问的程序集。

    【讨论】:

      【解决方案3】:

      使用 microsoft sysinternals 进程监视器的想法非常适合我。我可以看到它正在错误的文件夹中寻找依赖项之一。

      【讨论】:

        【解决方案4】:

        如果您遇到Could not load file or assembly,请使用Assembly Binding Log Viewer(在名为fuslogvw.exe 的磁盘上,可从 .NET SDK 中获取)来准确了解您的进程实际探测的内容,无论是在 GAC 还是您的应用程序文件夹中。

        一个典型的日志条目将包含类似这样的信息:

        LOG: Processing DEVPATH.
        LOG: DEVPATH is not set. Falling through to regular bind.
        LOG: Policy not being applied to reference at this time (private, custom, partial, or location-based assembly bind).
        LOG: Post-policy reference: graphicfailtest.resources, Version=0.0.0.0, Culture=en-US, PublicKeyToken=null
        LOG: Attempting download of new URL file:///C:/Program Files/Microsoft.NET/FrameworkSDK/Samples/Tutorials/resourcesandlocalization/graphic/cs/en-US/graphicfailtest.resources.DLL.
        

        然后您可以验证它是否从您期望的位置加载程序集,包括它是否是正确的版本。

        Probing 来自 msdn 文档。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2012-05-28
          • 1970-01-01
          • 2023-02-07
          • 1970-01-01
          • 2012-12-28
          • 2016-08-16
          • 2015-07-28
          相关资源
          最近更新 更多