C# 在DLL文件中存储函数

C# 在DLL文件中存储函数,c#,function,dll,C#,Function,Dll,我想将C#函数存储在DLL文件中,然后用参数调用该函数。到目前为止,我已经能够使用以下代码将函数存储在DLL文件中: var codeProvider = new CSharpCodeProvider(); var icc = codeProvider.CreateCompiler(); var parameters = new CompilerParameters(); parameters.GenerateExecutable = false; parameters.OutputAssemb

我想将C#函数存储在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文件中的函数(上述变量代码的值为):

我使用Assembly.LoadFile加载DLL,并使用反射获取包含函数的类。我还有两个相同的接口,一个在我的项目中,一个在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
}
公共静态IFunc CreateSumFunction()
{
var dll=Assembly.LoadFile(@“…\Sum.dll”);
var func=dll.GetType(“函数”);//包含函数的类
var instance=Activator.CreateInstance(func);

返回(IFunc)实例;//将您的库添加到项目的引用中。这样您就可以在不需要反射的情况下使用函数。

将您的库添加到项目的引用中。这样您就可以在不需要反射的情况下使用函数。

当您可以创建一个简单的类库,然后引用从其他项目输出的DLL?是否使用Visual Studio进行开发?不,我不能,DLL是在运行时创建并在运行时使用的,而不是在项目设计时使用的。您是否正在尝试实现加载项功能?是的,有点…@HishamMaudarbocus——将来,您应该在ti之前在问题中包含所有相关信息我。你在评论中给我们的信息非常重要,它会阻止人们投票否决你的问题并在给它机会之前关闭它。当你可以创建一个简单的类库,然后引用其他项目输出的DLL时,为什么要使用反射?你是用Visual St开发的吗udio?不,我不能,DLL是在运行时创建并在运行时使用的,而不是在项目设计时使用的。你是否在尝试实现插件功能?是的,有点…@HishamMaudarbocus——将来,你应该提前在问题中包含所有相关信息。你在评论中给我们的信息非常重要,并且会在给你机会之前,阻止人们投票否决你的问题并关闭它。请不要仅仅因为OP使用了一个坏的选项就投票否决这个问题title@PanagiotisKanavos当前位置没有人否决这个问题。只有这个答案,因为它不清楚问题的重点是什么。我指的是这个答案。在更多pe之前,我匆忙添加了一个警告人们惩罚无辜者。它有两张反对票和我的反对票。这个答案确实回答了问题的措辞。虽然OP想要一些完全不同的东西,一些在评论中变得明显的东西。请不要仅仅因为OP使用了一个坏的选项就对这个问题投反对票title@PanagiotisKanavos当前位置没有人否决这个问题呃,因为不清楚问题的重点是什么。我的意思是这个答案。在更多的人惩罚无辜者之前,我匆忙添加了一个警告。它有两个反对票和我的赞成票。这个答案确实回答了问题的措辞。虽然OP想要完全不同的东西,一些在评论中变得明显的东西
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
}