为什么我的代码抛出无效的强制转换异常?(C#)??

为什么我的代码抛出无效的强制转换异常?(C#)??,c#,dll,.net-assembly,.net,C#,Dll,.net Assembly,.net,错误信息: System.InvalidCastException:无法将类型为“ClassLibrary1.Plugin”的对象强制转换为类型为“PluginInterface.IPlugin” 我要做的是让我的程序访问一个程序集并运行它可能拥有的任何东西。 这将加载.dll private void AddPlugin(string FileName) { Assembly pluginAssembly = Assembly.LoadFrom(FileName); foreach (Type

错误信息: System.InvalidCastException:无法将类型为“ClassLibrary1.Plugin”的对象强制转换为类型为“PluginInterface.IPlugin”

我要做的是让我的程序访问一个程序集并运行它可能拥有的任何东西。 这将加载.dll

private void AddPlugin(string FileName)
{
Assembly pluginAssembly = Assembly.LoadFrom(FileName);
foreach (Type pluginType in pluginAssembly.GetTypes())
{
if (pluginType.IsPublic)
{
if (!pluginType.IsAbstract)
{
Type typeInterface = pluginType.GetInterface("PluginInterface… true);
if (typeInterface != null)
{
Types.AvailablePlugin newPlugin = new Types.AvailablePlugin();
newPlugin.AssemblyPath = FileName;
newPlugin.Instance = (IPlugin)Activator.CreateInstance(plugin…
// Above line throws exception.

newPlugin.Instance.Initialize();
this.colAvailablePlugins.Add(newPlugin);
newPlugin = null;
}
typeInterface = null;
}
}
}
pluginAssembly = null;
}
我的程序和程序集都有以下两个接口:

using System;

namespace PluginInterface
{
public interface IPlugin
{
IPluginHost Host { get; set; }
string Name { get; }
string Description { get; }
string Author { get; }
string Version { get; }
System.Windows.Forms.Form MainInterface { get; }
void Initialize();
void Dispose();
void ReceivedMessage(PlayerIOClient.Message m);
void Disconnected();
}

public interface IPluginHost
{
void Say(string message);
void Send(PlayerIOClient.Message m);
void Send(string message_Type, params object[] paramss);
}
}
要添加的我的类/程序集:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Threading;
using PluginInterface;

namespace ClassLibrary1
{

public class Plugin : IPlugin // <-- See how we inherited the IPlugin interface?
{
public Plugin()
{

}

string myName = "Title";
string myDescription = "Descrip";
string myAuthor = "Me";
string myVersion = "0.9.5";


IPluginHost myHost = null;
Form1 myMainInterface = new Form1();



public string Description
{
get { return myDescription; }
}

public string Author
{
get { return myAuthor; }
}

public IPluginHost Host
{

get { return myHost; }
set { myHost = value; }
}

public string Name
{
get { return myName; }
}

public System.Windows.Forms.Form MainInterface
{
get { return myMainInterface; }
}

public string Version
{
get { return myVersion; }
}

public void Initialize()
{
//This is the first Function called by the host...
//Put anything needed to start with here first
MainInterface.Show();
}

public void ReceivedMessage(PlayerIOClient.Message m)
{

}
public void Disconnected()
{

}

public void Dispose()
{
MainInterface.Dispose();
}

}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用系统文本;
使用System.Windows.Forms;
使用系统线程;
使用插件接口;
命名空间类库1
{
公共类插件:IPlugin//
我的程序和程序集都有以下两个接口:

using System;

namespace PluginInterface
{
public interface IPlugin
{
IPluginHost Host { get; set; }
string Name { get; }
string Description { get; }
string Author { get; }
string Version { get; }
System.Windows.Forms.Form MainInterface { get; }
void Initialize();
void Dispose();
void ReceivedMessage(PlayerIOClient.Message m);
void Disconnected();
}

public interface IPluginHost
{
void Say(string message);
void Send(PlayerIOClient.Message m);
void Send(string message_Type, params object[] paramss);
}
}
这是你的问题

两个不同程序集中的两个相同接口创建两种不同(且不相关)的类型


您需要在单个程序集中定义接口并添加对它的引用。

如果您删除不相关/空的代码块,只保留演示问题的部分,这将更容易在我们这边使用。:)是的。如果我有其他问题要问,我会记住这一点。通常我会这样做,但是因为我不知道从哪里开始,所以发生了这种情况。谢谢你的提示。尽量避免像“谢谢”这样的评论…修复起来很简单,但你(为我)节省了很多时间。谢谢。