2

我想知道为什么我的应用程序引用了我创建的也使用 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,堆栈跟踪指向最后一个大括号方法。第 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。

4

1 回答 1

4

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

更改项目,使它们在“dapper”方面都针对相同的 .net 级别,它应该可以工作。

于 2014-06-30T13:09:26.683 回答