C# 无法在dll内调用方法

C# 无法在dll内调用方法,c#,dll,C#,Dll,我已经用下面的代码创建了动态dll var provider = new CSharpCodeProvider(); var options = new CompilerParameters { OutputAssembly = Path.Combine(Path.GetTempPath(), "MyTestDll.dll") }; string testsource = ""using System;" +

我已经用下面的代码创建了动态dll

var provider = new CSharpCodeProvider();
    var options = new CompilerParameters
    {
        OutputAssembly = Path.Combine(Path.GetTempPath(), "MyTestDll.dll")

    };

    string testsource = ""using System;" +
                                "namespace Myclass.GetNames" +
                                "{" +
                                "public class Test1 : IDisposable" +
                                "{" +
                                "public string GivemeNames(int No);" +
                                "}" +
                                "}";";

    provider.CompileAssemblyFromSource(options, new[] { testsource });

将生成dll。但是当我在我的项目中添加这个dll时,我不能引用那个dll中的方法GivemeNames。生成dll时是否需要添加更多信息?

程序集将不包含给定的类,因为该类无法编译

具体来说,以下是您在该字符串中获得的代码,已重新格式化,但仍与您的代码相同:

using System;
namespace Myclass.GetNames
{
    public class Test1 : IDisposable
    {
        public string GivemeNames(int No);
    }
}
尝试编译此代码时应出现以下错误:

  • “Test1.GivemeNames(int)”必须声明一个主体,因为它没有标记为抽象、外部或部分
  • “Test1”未实现接口成员“System.IDisposable.Dispose()”
因此,假设程序集是创建的,它肯定不会编译并包含该代码

您应该尝试将代码改写为:

string testsource = @"
    using System;
    namespace Myclass.GetNames
    {
        public class Test1
        {
            public string GivemeNames(int No) { return ""Names: "" + No; }
        }
    }";
这将:

  • 改用
    @“…”
    语法,这样可以更容易地在几行上写字符串,请注意其中双引号的用法
  • 删除
    IDisposable
    支持,直到您准备添加它为止(记住还要添加
    Dispose
    方法)
  • 确保该方法返回一些内容

  • GivenNames来自哪个方法/库/类?这些代码是从您的程序复制的,还是您“简化”了它?我这样问是因为给定的代码(在那里的字符串中)是不合法的,所以它不会编译。具体来说,您既没有将
    GivemeNames
    抽象化,也没有给它一个方法体,这两者都是必需的。@JackM它不是来自任何库。我创建了这个方法,以便可以访问它。我做错了什么吗?您也没有实现
    Dispose
    。我在库中看不到它,因为您的信息类和方法必须具有公共可访问性才能允许最大重用。您可以在该类中添加一些可行的示例代码吗?