Frage

Können Sie eine LINQ-fähige app ausgeführt werden, die auf einer Maschine, die nur die .NET 2.0-Laufzeit installiert?

In der Theorie, LINQ ist nichts anderes als syntaktischer Zucker, und die resultierende IL-code sollten gleich Aussehen, als hätte es in .NET 2.0.

Wie kann ich schreiben, LINQ, ohne mit dem .NET 3.5 Bibliotheken?Wird es laufen .NET 2.0?

War es hilfreich?

Lösung

Es gibt einige "Hacks", die bedeuten, mit einem System.Core.dll aus dem Framework 3.5 zum ausführen mit .net 2.0, aber ich persönlich würde nicht wollen, dass solch ein etwas wackeligen Fundament.

Siehe hier: LINQ-Unterstützung auf .NET 2.0

  1. Erstellen Sie eine neue Konsolenanwendung
  2. Halten Sie nur System und System.Kern der referenzierten Assemblys
  3. Legen Sie die Lokale Kopie auf true System.Kern, weil es nicht vorhanden ist .NET 2.0
  4. Verwenden Sie eine LINQ-Abfrage in der Main-Methode.Für Beispiel unten.
  5. Bauen
  6. Kopieren Sie die bin-Ausgabe in eine Maschine, wo nur .NET 2.0 installiert ist
  7. Laufen

(Benötigt .net 2.0 SP1 und ich habe keine Ahnung, ob die Bündelung der System.Core.dll verstößt gegen den EULA)

Andere Tipps

Es ist seltsam, dass niemand erwähnt hat LINQBridge.Diese kleine genial-Projekt ist ein backport von LINQ (IEnumerable, aber ohne IQueryable) und Ihre Abhängigkeiten (Func, Action, etc) zu .NET 2.0.Und:

Wenn Ihre Projekt-Referenzen LINQBridge während der Kompilierung, dann wird es binden zu LINQBridge die Abfrage-Operatoren;wenn es Referenzen-System.Kern während Zusammenstellung, dann wird es binden Framework 3.5 die Abfrage Operatoren.

In der Theorie ja, vorausgesetzt, Sie verteilen die LINQ-spezifischen Baugruppen und Abhängigkeiten.Aber das ist eine Verletzung des Microsoft-Lizenzierung.Scott Hanselman, schrieb einen blog-post über Bereitstellen ASP.NET MVC auf ASP.NET 2.0 das ist ähnlich wie das, was Sie wollen zu tun.

Sie können die LINQ-Quellen von mono - (.NET für Linux), um LINQ ausgeführt wird .NET 2.0.

IEnumerable<T> : yes 
IQueryable<T>  : yes
LINQ to XML : has been working in the trunk, but due to further additions, the trunk doesn't compile anymore

Jemand getan hat, es hier:
LINQ für .NET 2.0

Kurze Antwort:

  • LINQ to Objects:ja (IEnumerable<T>)
  • LINQ zu SQL/Unternehmen:keine (IQueryable<T>)
  • LINQ zu XML/DataSets:noch nicht?

Finden diese Frage über .Net 3.5 Funktionen automatisch zur Verfügung stehen, oder mit wenig Aufwand, wenn Sie gezielt .Net 2.0 von VS2008.

Im Grunde, alles, was ist nur "syntax Zucker" und die neuen Compiler (C# 3.0, VB 9.0) emittieren als 2.0-kompatibel IL funktionieren wird.Dies beinhaltet viele Funktionen von LINQ verwendet wird, wie anonyme Klassen, Lambda-Ausdrücke als anonyme Delegaten, automatische Eigenschaften, objektinitialisierer, und auflistungsinitialisierer.

Einige LINQ-Funktionen nutzen, Klassen, Schnittstellen, Delegaten und Erweiterung-Methoden, die live in der neuen 3.5-Assemblys (wie System.Core.dll).Die Umverteilung dieser Versammlungen ist ein lizenzverstoß, aber Sie könnten reimplementiert.Mithilfe von erweiterungsmethoden müssen nur das deklarieren Sie eine leere System.Runtime.CompilerServices.ExtensionAttribute.LINQ zu Objekten beruht auf IEnumerable<T> Erweiterungen und mehrere Delegaten verwendet (der Action<T> und Func<T> Familien) und umgesetzt worden LINQBridge (als mausch erwähnt).LINQ to XML und LINQ to DataSets verlassen Sie sich auf LINQ to Objects, die ich denke, könnte auch umgesetzt werden .Net 2.0, aber ich habe nicht gesehen, dass dieses noch nicht fertig.

LINQ to SQL und LINQ to Entities erfordern viele neue Klassen (DataContext/ObjectContext, viele der Attribute, EntitySet<T>, EntityRef<T>, Link<T>, IQueryable<T>, usw.) und der Ausdruck Bäumen, die, wenn auch irgendwie neu implementiert, wird wahrscheinlich erfordern mindestens .Net 2.0 SP1 zu arbeiten.

Ich bin nicht sicher, über C#.

Ich weiß aber, dass Sie schreiben können, VB LINNQ code w/out 3,5-Bibliotheken wie lange, wie Sie das VS 2008-compiler, um den Gegner das 2.0-framework.

Sie wird jedoch mit der Umsetzung einiger der LINQ-Methoden, die dein selbst.

LINQ verwendet eine syntatic transformation zum übersetzen von Abfragen in ausführbaren code.Im Grunde, wird es nehmen-code wie diese:

dim q = from x in xs where x > 2 select x*4;

und konvertieren Sie es in code wie diesem:

dim q = xs.where(function(x) x > 2).select(function(x) x * 4);

Für die LINQ-Funktionen, die Schiffe mit 3.5 framework-Methoden implementiert als Erweiterung-Methoden, die entweder auf IEnumerable oder IQueryable (es gibt auch eine Reihe von Methoden, die Daten-sets).

Die Standard IEnumerable erweiterungsmethoden definiert werden, im System.Linq.Zählbare und wie folgt Aussehen:

<Extension()>
public function Select(of T, R)(source as IEnumerable(of T), transform as Func(of T, R)) as IEnumerable(of R)

   'do the transformation...

end function

Die IQueryable-Erweiterung Methoden Ausdrücke Bäume als Argumente, die eher als Lambda-Ausdrücke.Sie sehen aus wie diese:

 <Extension()>
 public function Select(of T, R)(source as IQueryable<T>, transform as Expression(of Func(of T, R))
     'build a composite IQueryable that contains the expression tree for the transformation
 end function

Die expression tree Versionen, mit denen man eine strukturierte Darstellung der Ausdrücke zur Verfügung gestellt, um die Klauseln, die dann verwendet werden können, zum generieren von SQL-code (oder was immer Sie sonst noch wollen).

Wahrscheinlich könnte man erstellen Sie Ihre eigene version von LINQ to objects in etwa einen Tag oder so.Es ist alles ziemlich straight-forward.

Wenn Sie verwenden möchten DLINQ, dann würden die Dinge ein wenig schwieriger.

Nein, denn während Sie dachte, LINQ ist eigentlich nur syntaktischer Zucker ist, ist es eigentlich sehr stark genutzt Ausdruck Bäumen-ein feature fehlt .NET 2.0.

That being said .NET 3.5 nur baut sich auf der Oberseite .NET 2.0, und das ist der Grund, warum die IL nicht "anders" oder "besonders".

Ich sehe nicht einen Grund, warum Sie sollten nur nicht installieren .NET 3.5 Framework.Alles .NET 2.0 funktioniert auf es, versprochen :)

Soweit ich weiß, die LINQ-Bibliothek ist nur verfügbar, seit dem framework 3.0.Wenn Sie möchten, verwenden Sie etwas ähnliches in der framework 2.0, würden Sie brauchen, um rewritte es selbst :) oder eine vergleichbare third-party-Bibliothek.Ich fand nur ein wenig Informationen hier aber es hat nicht überzeugt, mich auch.

Sie können verwenden linqbridge für .net 2.0

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top