2013-05-14 20 views
5

ich kopieren und einfügen Quelle WebMatrix.WebData.IDatabase aber VStudio Zeichen Dynamische Worte und sagteVerwenden Sie nicht 'System.Runtime.CompilerServices.DynamicAttribute'. Verwenden Sie die ‚dynamische‘ Schlüsselwort statt

Sie nicht ‚System.Runtime.CompilerServices.DynamicAttribute‘ verwenden. Verwenden Sie stattdessen das Schlüsselwort 'dynamic' .

Warum bekomme ich diesen Fehler, wenn original .net Framework es verwendet?

Der Quellcode ist hier:

namespace WebMatrix.WebData 
{ 
    using System; 
    using System.Collections.Generic; 
    using System.Runtime.CompilerServices; 

    internal interface IDatabase : IDisposable 
    { 
     int Execute(string commandText, params object[] args); 

     [return: Dynamic(new bool[] { false, true })] 
     IEnumerable<object> Query(string commandText, params object[] parameters); 

     [return: Dynamic] 
     object QuerySingle(string commandText, params object[] args); 

     [return: Dynamic] 
     object QueryValue(string commandText, params object[] parameters); 
    } 
} 

und ich gleiche Fehler hier:

namespace WebMatrix.WebData 
{ 
    internal class DatabaseWrapper : IDatabase, IDisposable 
    { 
     private readonly Database _database; 

     public DatabaseWrapper(Database database) 
     { 
      this._database = database; 
     } 

     public void Dispose() 
     { 
      this._database.Dispose(); 
     } 

     public int Execute(string commandText, params object[] parameters) 
     { 
      return this._database.Execute(commandText, parameters); 
     } 

     [return: Dynamic(new bool[] { false, true })] 
     public IEnumerable<object> Query(string commandText, params object[] parameters) 
     { 
      return this._database.Query(commandText, parameters); 
     } 

     [return: Dynamic] 
     public object QuerySingle(string commandText, params object[] parameters) 
     { 
      return this._database.QuerySingle(commandText, parameters); 
     } 

     [return: Dynamic] 
     public object QueryValue(string commandText, params object[] parameters) 
     { 
      return this._database.QueryValue(commandText, parameters); 
     } 
    } 
} 
+0

wo kopieren Sie diese Quelle * aus *, genau? Es sieht für mich aus, als ob Sie eine alte Quelle verwenden –

+1

@Marc Gravell Ich benutzte .net Reflektor, um es zu dekompilieren ... –

+1

ah, rechts; dann ist das ** nicht der Quellcode **. Reflektoren werden oft "falsch" angezeigt, weil sie ** nicht den Quellcode anzeigen **. Oder alternativ, Reflektor bringt Dinge "richtig", indem er Ihnen zeigt, was wirklich da ist. Aber: Das kann anders sein als das, was Sie als Code schreiben würden. –

Antwort

5

, dass die Karten auf:

IEnumerable<dynamic> Query(string commandText, params object[] parameters); 
dynamic QuerySingle(string commandText, params object[] args); 
dynamic QueryValue(string commandText, params object[] parameters); 

Der einzige Grund, warum ich denken kann, Die Verwendung der alternativen Syntax dient dazu, sie auf einem Compiler auf niedriger Ebene zu kompilieren, der nichts über denweißSchlüsselwort. Jedoch existiert [DynamicAttribute] nur seit .NET 4.0, das einen Compiler mit dynamic Unterstützung enthält. Gedanken:

  • ist es vielleicht das asp.net-Compiler, die vLatest zu verwenden, werden möglicherweise nicht unbedingt konfiguriert
  • ist vielleicht dies zu frühe Entwicklung beziehen sich gegen CTP baut, wenn dynamic unvollständig war

Wenn Sie sich die current source ansehen, wird dynamic verwendet, was die Hypothese unterstützt, dass jegliche Verwendung [Dynamic] rein transitional war.

+0

Vielen Dank .. http://aspnetwebstack.codeplex.com/SourceControl/latest#src/WebMatrix.WebData/IDatabase.cs ist eine gute Quelle für die Verwendung ..: D –

Verwandte Themen