类型为';System.IO.FileNotFoundException';-Dll&;远程处理

本文关键字:程处理 处理 FileNotFoundException System IO 类型 -Dll amp | 更新日期: 2023-09-27 18:27:14

我正在尝试制作一个Nim游戏,其中逻辑发生在服务器上,客户端呈现游戏以更好地处理.NET远程处理。我有一个从这个类库构建的dll:

namespace Nim_Common
{
    public interface computerCommon
    {
        int[] startGame(int columnNumber);
        int[] computeTurn(int[] penStatus); 
        bool checkWin();
    }
}

我添加的dll作为对我的客户端项目和服务器项目的引用,并将dll添加到每个项目的bin/Debug目录中。

这是我的客户代码的相关部分:

using Nim_Common;
namespace Nim
{
    public partial class Form1 : Form
    {
            private computerCommon computerServerHandler;
            ...
public Form1()
        {
            InitializeComponent();
            computerToolStripMenuItem.Select();
            newColumnNumber = -1; 
            RemotingConfiguration.Configure("client.exe.config");
            computerServerHandler = (computerCommon)Activator.GetObject(typeof(computerCommon), "http://localhost:1234/_Server_");
            StartGame(this, null);
        }
private void StartGame(object sender, EventArgs e)
        {
            int max = 0;
            if(columns != null)
                for (int i = 0; i < columns.Length; i++) Controls.Remove(columns[i]);
            int[] temp = computerServerHandler.startGame(newColumnNumber);
            columns = new Column[temp.Length];
            ...
        }

在服务器部分:

using Nim_Common;
namespace Nim_Server
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }
        private void Form1_Load(object sender, EventArgs e)
        {
            RemotingConfiguration.Configure("server.exe.config");
        }
    }
    class ServerPart : MarshalByRefObject, computerCommon
    {
        ...
        public ServerPart()
        {
            ...
        }
        public int[] startGame(int columnNumber)
        {
            ...
        }
        public int[] computeTurn(int[] penStatus)
        {
            ...
        }
        public bool checkWin()
        {
            ...
        }
    }
}

server.exe.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <system.runtime.remoting>
    <application>
      <channels>
        <channel ref="http server" port="1234" />
      </channels>
      <service>
        <wellknown mode ="SingleCall" type="Nim_Server.ServerPart, Nim_Server" objectUri="_Server_" />
      </service>
    </application>
  </system.runtime.remoting>
</configuration>

client.exe.config:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
    </startup>
  <system.runtime.remoting>
    <application>
      <channels>
        <channel ref="http client" />
      </channels>
      <client>
        <wellknown type="Nim_Common.computerCommon, Nim_Common" url="http://localhost:1234" />
      </client>
    </application>
  </system.runtime.remoting>
</configuration>

如果这很重要的话,我的防火墙已经关闭了。编译时一切正常,服务器运行良好。当客户端到达这一行时,它抛出异常:

int[] temp = computerServerHandler.startGame(newColumnNumber);

例外情况如下:

An unhandled exception of type 'System.IO.FileNotFoundException' occurred in mscorlib.dll
Additional information: Could not load file or one of its dependencies, the system could not find "Nim_Common". // This is shown in my native language so I'm improvising a bit with the translation.

发生了什么事,我该如何解决?

谢谢。

类型为';System.IO.FileNotFoundException';-Dll&;远程处理

我从自己编译的dll中收到了这个错误。事实证明,我已经在AssemblyInfo.cs文件中填写了AssemblyCultureAttribute。生成的项目没有问题,但使用时不会加载到任何引用的项目中。

根据msdn:

将此属性放在程序集上,并使用非空字符串(")作为区域性名称,会使此程序集看起来像附属程序集,而不是包含可执行代码的主程序集。用这个属性标记传统的代码库会破坏它,因为在运行时没有其他代码能够找到库的入口点。