Dapper在应用程序中调用,并在DLL中调用抛出MissingMethodException

时间:2014-06-27 20:49:26

标签: c# dll dapper missingmethodexception

我想知道为什么我的应用程序引用我创建的也使用Dapper的dll失败。 我收到Method not found: 'System.Collections.Generic.IEnumerable'1<!!0> Dapper.SqlMapper.Query(System.Data.IDbConnection, System.String, System.Object)'.错误消息。 当我跟踪这个有问题的代码时,它似乎在DotPdfInvoideLayout.dll @ InvoiceManager.LoadData()中 下面是失败方法的代码,因为我将其称为dll,Stack Trace指向方法的最后一个大括号。 1988年。我假设我的真正问题是调用Query()

的行
public void loadData(IEnumerable<IPdfRenderable> textBoxes)
{
    var conn = new SqlConnection("Server=something;DataBase=TRIMS;UID=user;Password=password;");
    var output = conn.Query<TRIMNameAddressMaster>("Select top 1 * from Trims.dbo.TRIMNAMEADDRESSMASTER where id =  '" + _transaction.strap + "'", null).FirstOrDefault();

    var type = output.GetType();

    var properties = type.GetProperties();


    var r = new System.Text.RegularExpressions.Regex(@"((?<=\{)[^}]*(?=\}))+");



    foreach (var textbox in textBoxes)
    {

        var matches = r.Matches(((PdfTextBox)textbox).Text);

        foreach (Match match in matches)
        {
            try
            {
                var p = properties.Single(pi => pi.Name.ToLower() == match.Value.ToLower());
                ((PdfTextBox)textbox).Text = ((PdfTextBox)textbox).Text.Replace(
                    "{" + match.Value + "}", (p.GetValue(output, null) ?? string.Empty).ToString());
            }
            catch (Exception ex)
            {
                Console.WriteLine("No Mapping occurred" + match.Value);
            } 
        }

    }
}

作为控制台应用程序DotPdfInvoiceLayout运行完全正常。 我删除了Main()并更改了项目属性,将其作为类库运行,然后复制了 将dll生成到我的Web应用程序的bin中,并引用web项目中的dll。

我试图确保两者都使用相同版本的Dapper。

1 个答案:

答案 0 :(得分:3)

这听起来好像其中一个项目正在引用低级3.5库,而另一个项目正在引用高级4.0 / 4.5库。我们同时将.NET 3.5项目配置为仅使用C#3.0语法 - 尽管在某些方面,这实际上是来自&#34;在当天的遗留事物&#34;当dapper被部署为代码文件而不是程序集时。由于使用C#3.0,它对可选参数没有相同级别的支持,因此它使用重载。这些重载在4.0 / 4.5库中根本就不存在。因此,3.5项目不能直接与4.0项目互换。

更改项目,使其在&#34; dapper&#34;方面都定位到相同的.net级别,并且它应该可以正常工作。