无法调用dll内部的方法

本文关键字:方法 内部 dll 调用 | 更新日期: 2023-09-27 18:23:58

我使用以下代码创建了动态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时是否需要添加更多信息?

无法调用dll内部的方法

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

具体来说,这是您在该字符串中的代码,经过重新格式化,但仍然与您的代码相同:

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

您应该从尝试编译此代码中得到的错误是:

  • "Test1.GivemeNames(int)"必须声明主体,因为它没有标记为abstract、extern或partial
  • "Test1"未实现接口成员"System.IDisposable.Dispose()"

因此,假设程序集已经创建,它肯定不会编译并包含该代码。

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

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

这将:

  1. 请改用@"..."语法,这样可以更容易地在几行中写入字符串,请注意其中使用了双引号
  2. 删除对IDisposable的支持,直到您准备好添加它为止(还记得添加Dispose方法)
  3. 请确保该方法返回一些内容