Dapper appelé dans l'application, et appelé dans DLL lance une MissingMethodException

c# dapper dll missingmethodexception

Question

Je me demande pourquoi mon application qui fait référence à une DLL que j'ai créée et qui utilise également Dapper échoue. Je reçois une Method not found: 'System.Collections.Generic.IEnumerable'1<!!0> Dapper.SqlMapper.Query(System.Data.IDbConnection, System.String, System.Object)'. Message d'erreur. Lorsque je fais le suivi du code incriminé, il semble être dans DotPdfInvoideLayout.dll @ InvoiceManager.LoadData() Voici ci-dessous le code de la méthode qui échoue, car j'appelle ceci comme une DLL, le Stack Trace pointe sur la dernière accolade de la méthode. Line 1988. Je suppose que mon vrai problème est la ligne qui fait l'appel à 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);
            } 
        }

    }
}

En tant qu'application de console, DotPdfInvoiceLayout fonctionne parfaitement. J'ai supprimé le fichier principal () et modifié les propriétés du projet pour l'exécuter en tant que bibliothèque de classes, puis copié le fichier DLL généré dans le bac de mon application Web et référencé la DLL dans le projet Web.

J'ai essayé de m'assurer que les deux utilisent la même version de Dapper.

Réponse acceptée

Cela ressemble à l'un des projets faisant référence à la bibliothèque de niveau inférieur de niveau 3.5, et l'autre faisant référence à la bibliothèque de niveau supérieur 4.0 / 4.5. Nous avons intentionnellement l'intention de configurer le projet .NET 3.5 pour n'utiliser que la syntaxe C # 3.0 - bien que, à certains égards, il s'agisse d'une opération héritée du "retour en arrière" lorsque dapper était déployé en tant que fichier de code plutôt qu'en assembleur. En raison de l’utilisation de C # 3.0, il n’a pas le même niveau de prise en charge des paramètres facultatifs. Par conséquent, il utilise des surcharges . Ces surcharges n'ont tout simplement jamais existé dans la bibliothèque 4.0 / 4.5. De ce fait, le projet 3.5 n'est pas directement interchangeable avec le projet 4.0.

Modifiez les projets pour qu'ils ciblent tous deux le même niveau .net en termes de "dapper", et cela devrait fonctionner.




Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi