我想知道为什么我的应用程序引用我创建的也使用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。
答案 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级别,并且它应该可以正常工作。