类型为';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.
发生了什么事,我该如何解决?
谢谢。
我从自己编译的dll中收到了这个错误。事实证明,我已经在AssemblyInfo.cs文件中填写了AssemblyCultureAttribute。生成的项目没有问题,但使用时不会加载到任何引用的项目中。
根据msdn:
将此属性放在程序集上,并使用非空字符串(")作为区域性名称,会使此程序集看起来像附属程序集,而不是包含可执行代码的主程序集。用这个属性标记传统的代码库会破坏它,因为在运行时没有其他代码能够找到库的入口点。