类型为“System.IO.FileNotFoundException”的未处理异常 - Dll&远程

时间:2014-10-19 16:08:55

标签: c# dll remoting filenotfoundexception .net-remoting

我试图制作Nim游戏,其中逻辑发生在服务器上,客户端呈现游戏以便在.NET Remoting上更好。 我有一个我从这个类库构建的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.

发生了什么,我该如何解决这个问题?

感谢。

1 个答案:

答案 0 :(得分:0)

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

根据msdn:

  

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