Dapper在应用程序中调用,并在DLL中调用抛出一个MissingMethodException
本文关键字:调用 MissingMethodException 一个 DLL 应用程序 并在 Dapper | 更新日期: 2023-09-27 18:10:31
我想知道为什么我的应用程序引用我创建的也使用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。
这听起来像是其中一个项目引用了底层的3.5库,而另一个引用了上层的4.0/4.5库。我们有意将。net 3.5项目配置为只使用c# 3.0语法——尽管从某些方面来说,这实际上是"过去"的遗留问题,当时dapper是以代码文件而不是程序集的形式部署的。由于使用c# 3.0,它对可选参数没有相同级别的支持,所以它使用重载。这些重载在4.0/4.5库中根本不存在。因此,3.5项目不能直接与4.0项目互换。
更改项目,使它们都针对相同的。net级别的"dapper",它应该工作