C# Dapper在应用程序中调用,在DLL中调用正在引发MissingMethodException

C# Dapper在应用程序中调用,在DLL中调用正在引发MissingMethodException,c#,dll,dapper,missingmethodexception,C#,Dll,Dapper,Missingmethodexception,我想知道为什么我的应用程序引用了我创建的一个也使用Dapper的dll却失败了。 我得到一个找不到的方法:“System.Collections.Generic.IEnumerable'1 Dapper.SqlMapper.QuerySystem.Data.IDbConnection,System.String,System.Object”。错误消息。 当我追踪到有问题的代码时,它似乎位于DotPdfInvoideLayout.dll@InvoiceManager.LoadData中 下面是失败

我想知道为什么我的应用程序引用了我创建的一个也使用Dapper的dll却失败了。 我得到一个找不到的方法:“System.Collections.Generic.IEnumerable'1 Dapper.SqlMapper.QuerySystem.Data.IDbConnection,System.String,System.Object”。错误消息。 当我追踪到有问题的代码时,它似乎位于DotPdfInvoideLayout.dll@InvoiceManager.LoadData中 下面是失败方法的代码,因为我将其作为dll调用,堆栈跟踪指向该方法的最后一个大括号。第1988行。我假设我真正的问题是调用查询的线路

作为控制台应用程序,DotPdfInvoiceLayout运行得非常好。 我删除了Main并更改了项目属性以将其作为类库运行,然后复制了 在我的web应用程序的bin中生成dll,并在web项目中引用该dll


我试图确保两者使用的是同一版本的Dapper。

这听起来像是其中一个项目引用的是底层3.5库,而另一个项目引用的是上层4.0/4.5库。我们有意将.NET3.5项目配置为只使用C3.0语法——尽管在某些方面,这实际上是dapper作为代码文件而不是程序集部署时遗留下来的东西。由于使用C3.0,它对可选参数的支持程度不一样,因此它使用重载。这些重载在4.0/4.5库中根本不存在。因此,3.5项目不能与4.0项目直接互换


更改项目,使它们都以相同的.net级别为目标,在简洁性方面,它应该可以工作。

这听起来像是其中一个项目引用了较低级别的3.5库,另一个项目引用了较高级别的4.0/4.5库。我们有意将.NET3.5项目配置为只使用C3.0语法——尽管在某些方面,这实际上是dapper作为代码文件而不是程序集部署时遗留下来的东西。由于使用C3.0,它对可选参数的支持程度不一样,因此它使用重载。这些重载在4.0/4.5库中根本不存在。因此,3.5项目不能与4.0项目直接互换


更改项目,使它们在简洁性方面都针对相同的.net级别,并且应该可以工作。

我怀疑其中一个项目引用的是.net 4.0或.net 4.5版本,另一个项目引用的是较低级别的.net 3.5版本。这可能吗?是的。这是可能的。我将在周一检查这个问题。我更改了dll的目标版本,重新安装了nuget,然后将dll重新引用到我的web项目中。这解决了问题。请将您的评论更改为回答。我怀疑其中一个引用的是.net 4.0或.net 4.5版本,另一个引用的是底层版本.net 3.5。这可能吗?是的。这是可能的。我将在周一检查这个问题。我更改了dll的目标版本,重新安装了nuget,然后将dll重新引用到我的web项目中。这解决了问题。请将您的评论更改为回答。
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);
            } 
        }

    }
}