Ich möchte Compiler Fehler lokal Methoden verursachen, die geändert werden müssen, sobald ich den Übergang zu .NET Framework 4.0. Siehe unten:Wie mache ich meinen Code zu brechen, wenn der Übergang zu .NET Framework 4.0
Ups, während dies nur ein Beispiel ist, funktioniert dieser Code überhaupt nicht, etwas, das ich gerade realisiert habe. (Eine korrigierte Version ist am Ende zur Verfügung, wenn Sie jemals diese Art von Funktionalität benötigen)
// ASP.NET 3.5 does not contain a global accessor for routing data
// this workaround will be used until we transition to .NET 4.0
// this field still exists in .NET 4.0, however, it is never used
// GetRouteData will always return null after the transition to .NET 4.0
static object _requestDataKey = typeof(UrlRoutingModule)
.GetField("_requestDataKey", BindingFlags.NonPublic | BindingFlags.Instance)
.GetValue(null)
;
public static RouteData GetRouteData(this HttpContext context)
{
if (context != null)
{
return context.Items[_requestDataKey] as RouteData;
}
// .NET 4.0 equivalent
//if ((context != null) && (context.Request != null))
//{
// return context.Request.RequestContext.RouteData;
//}
return null;
}
Kennt jemand einen Trick, der in einem Compiler-Fehler führt, wenn der Übergang gemacht wird?
Dieser Code entspricht tatsächlich der ursprünglichen Version. Dieser Code ist auch nicht spezifisch für die Version 3.5 der Laufzeit, es gibt jedoch einfachere Möglichkeiten, um die Routendaten in 4.0 zu erhalten.
if (context != null)
{
var routeData = context.Items["RouteData"] as RouteData;
if (routeData == null
&& !context.Items.Contains("RouteData"))
{
context.Items["RouteData"] = routeData = RouteTable.Routes.GetRouteData(new HttpContextWrapper(context));
}
return routeData;
}
Oh, ein Fehler Präprozessor Anweisung, schön, ich wusste nicht, dass es einen gab. Das wird funktionieren, ich muss nur das Symbol definieren, wenn ich mit dem neuen Framework kompiliere, und diese Fehler sollten auftauchen. Danke @ Christian.K –