无法在dll中调用方法

时间:2014-09-22 12:14:23

标签: c# dll

我使用下面的代码

创建了动态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时是否需要添加更多信息?

1 个答案:

答案 0 :(得分:1)

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

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

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

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

  • ' Test1.GivemeNames(INT)'必须声明一个正文,因为它没有标记为abstract,extern或partial
  • '测试1'没有实现接口成员&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. 确保该方法返回一些内容。