我試圖使用預編譯的DLL與反思,以實例爲我的類的接口是在DLL反射麻煩。我嘗試了這本書,但它不會工作。它引發InvalidCastException當我嘗試做一些事情,如:InvalidCastException的,DLL和C#中
ICompute iCompute = (ICompute)Activator.CreateInstance(type);
其中當然類型是我的類,它實現ICompute接口。我卡住了,不知道該怎麼辦。完整的代碼如下:
這是DLL內容:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace ConsoleApplication18
{
public class ClassThatImplementsICompute : ICompute
{
public int sumInts(int term1, int term2)
{
return term1 + term2;
}
public int diffInts(int term1, int term2)
{
return term1 - term2;
}
}
}
實際的程序:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace ConsoleApplication18
{
public interface ICompute
{
int sumInts(int term1, int term2);
int diffInts(int term1, int term2);
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Loading dll...");
Assembly assembly = Assembly.LoadFrom("mylib.dll");
Console.WriteLine("Getting type...");
Type type = assembly.GetType("ConsoleApplication18.ClassThatImplementsICompute");
if (type == null) Console.WriteLine("Could not find class type");
Console.WriteLine("Instantiating with activator...");
//my problem!!!
ICompute iCompute = (ICompute)Activator.CreateInstance(type);
//code that uses those functions...
}
}
}
誰能幫助我?謝謝!
是'ICompute'聲明兩次?每次組裝一次?如果是這樣,那是你的問題。僅僅因爲兩個接口具有相同的成員不會使它們成爲相同的接口。 – vcsjones
你有沒有嘗試使用.NET 4和動態?如果iCompute是動態的,那麼它可能工作。 –
@vcsjones 起初我還以爲同一然後重新編譯我的DLL以這樣的方式 CSC /目標:庫/reference:Program.exe /out:mylib.dll ClassThatImplementsICompute.cs 我做了它可能是錯的方式第一次: CSC /目標:庫/out:mylib.dll Program.cs的ClassThatImplementsICompute.cs – TechInstinct