我想將C#函數存儲在DLL文件中,稍後使用參數調用該函數。到目前爲止,我已經能夠給函數存儲在一個DLL文件用下面的代碼:將函數存儲在DLL文件中
var codeProvider = new CSharpCodeProvider();
var icc = codeProvider.CreateCompiler();
var parameters = new CompilerParameters();
parameters.GenerateExecutable = false;
parameters.OutputAssembly = "Sum.dll";
icc.CompileAssemblyFromSource(parameters, code);
在DLL文件中的函數(可變碼值以上):
public class Function : IFunc
{
public string ID
{
get { return ""Sum""; }
}
public string Name
{
get { return ""Sum""; }
}
public string Description
{
get { return ""Return the sum of the values specified in args""; }
}
public ResultSet Execute(params string[] args)
{
var sum = 0;
foreach(var arg in args)
{
var rslt = 0;
if(int.TryParse(arg, out rslt))
{
sum += rslt;
}
}
ResultSet rtn = new ResultSet();
rtn.Result = sum.ToString();
rtn.Type = ""int"";
return rtn;
}
}
我已經使用Assembly.LoadFile加載DLL並使用反射來獲取包含函數的類。我也有2個相同的接口,一個在我的項目,一個在DLL文件:
public interface IFunc
{
string ID { get; }
string Name { get; }
string Description { get; }
string Execute(params string[] args);
}
爲了能夠叫我使用的功能:異常的
public static IFunc CreateSumFunction()
{
var dll = Assembly.LoadFile(@"...\Sum.dll");
var func = dll.GetType("Function"); // Class containing the function
var instance = Activator.CreateInstance(func);
return (IFunc)instance; // <--- CRASH
}
部分:
System.Windows.Markup.XamlParseException未處理 Message ='匹配指定綁定約束的類型'GenericCoder.MainWindow'上構造函數的調用拋出異常。'行號「3」和行位置「9」。
有沒有一種方法可以解決這個問題,或者是一種完整的新方法?
爲什麼在創建簡單的類庫時使用反射,然後從其他項目中引用輸出的DLL?你是用Visual Studio開發的嗎? –
不,我不能,DLL在運行時創建,並在運行時使用,而不是在項目設計 –
您是否試圖實施Addin功能? –