Ist es möglich, die bedingt zu kompilieren .NET Framework version?
Ich mich erinnern kann, zurück, wenn die Arbeit mit MFC-Sie unterstützen könnten mehrere Versionen der MFC-framework durch die überprüfung der _MFC_VER
makro.
Ich bin dabei einige Dinge jetzt mit .NET 4 und würde die gerne verwenden-Tupel in ein paar spots, aber immer noch alles andere 3.5 kompatibel.
Ich bin auf der Suche nach etwas wie:
#if DOTNET4
public Tuple<TSource, TResult> SomeMethod<TSource, TResult>(){...}
#else
public KeyValuePair<TSource, TResult> SomeMethod<TSource, TResult>(){...}
#endif
- Vielleicht Stimmen diese: connect.microsoft.com/VisualStudio/feedback/details/679124/...
- mögliche Duplikate von Bedingte Kompilierung und Rahmenbedingungen Ziele
- Diese user-voice ist nicht ganz das gleiche und sowieso geschlossen ist. Ich konnte nicht finden einen anderen, der spricht, um die framework-version, so habe ich eine erstellt, visualstudio.uservoice.com/forums/121579-visual-studio/.... Bitte upvote es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Gibt es keine builtin-precompiler, können Sie Konstanten verwenden. Aber, es ist leicht genug, erstellen Sie Ihre eigene build-Konfigurationen in VS mit jede Konfiguration hat Ihren eigenen Satz von definierten Konstanten und natürlich ein Ziel-framework-version. Eine Menge Leute tun dies bedingt kompilieren basierten 32-oder 64-bit-Unterschiede.
Gibt es eine große Einschränkung bewusst zu sein, beim definieren von benutzerdefinierten Zusammenstellung Symbole in Ihr .csproj (oder .vbproj, theoretisch): Sie überschreiben alle zuvor definierten Zusammenstellung von Symbolen. Betrachten Sie zum Beispiel die MSBuild-snippet:
Zweiten DefineConstants element wird, wie der Wert vermuten lässt, verpasste die erste den Wert DefineConstants. Um dies zu vermeiden, werden Sie wollen, zu schreiben, die zweite DefineConstants-element wie folgt Aussehen:
Auch, Sie werden wollen, platzieren Sie diese in einer PropertyGroup definiert nach alle anderen PropertyGroups, wie Visual Studio 2010 aktuell fügt benutzerdefinierte Zusammenstellung von Symbolen, die in einer solchen Weise, dass es Klamotten beliebige andere benutzerdefinierte Zusammenstellung von Symbolen, die Sie definieren, wenn Sie platziert sind, bevor Sie Visual Studio plumpst nach unten auf Ihre definition. Ich habe eingereicht, dieses Problem mit Microsoft. Sie können verfolgen, Ihre Fortschritte bei Microsoft Connect.
<DefineConstants>NETFX$(TargetFrameworkVersion.Replace("v", "").Replace(".", "_"));$(DefineConstants)</DefineConstants>
On a side note, Ihr bedingte Kompilierung code wird frustrieren Programmierern, die ihm begegnen.
Bearbeitet, basierend auf Kommentare
Ist es wahrscheinlich besser, eine eigene Klasse schreiben, so dass Sie garantieren können, was es tun wird, und Sie nicht haben eine seltsame Signatur oder erbschaftsfragen:
Wie immer, es ist gut, sich zu Wiegen mit der eingebauten Sachen vs. rolling aus Ihren eigenen code. In der Regel bedeutet, Fragen sich, "Bin ich OK, den Erhalt und die Förderung dieser code?" vs. "Funktioniert der code tun, was ich es brauche, out of the box?"
In diesem Fall, da Sie nicht garantiert, um
Tuple<T1, T2>
ist, würde ich nur schreiben Sie Ihre eigene einfache, so dass andere Entwickler können aufatmen 🙂Als Sie sollten unterschiedliche Projekte, die Sie haben könnten partielle Klassen und einzige Referenz, die Sie brauchen für jedes Projekt mit der spezifischen Logik für Sie:
classname.cs
public partial classname { ... }
classname.40.cs
public partial classname {
public Tuple SomeMethod(){...}
}
classname.35.cs
public partial classname {
öffentliche KeyValuePair SomeMethod(){...}
}