Nach der Installation des Windows 10 Anniversary Update über das Wochenende, die .NET Framework 4.6.2 enthält, funktioniert einige Code nicht mehr. Ich bin zu einer Version von vor einer Woche zurückgegangen, um sicherzustellen, dass sie nicht mit unserem Code zusammenhängt.System.Web.Globalization Namespace eingeführt mit .NET 4.6.2 Konflikte zur Laufzeit mit System.Globalization
Zur Laufzeit wird ein Fehler ausgelöst:
Fehler BC30561: 'Globalisierung' ist nicht eindeutig, importiert aus den Namensräumen oder Arten 'System.Web, System'.
Stapelüberwachung:
System.Web.HttpCompileException (0x80004005): C:\path\to\project\MasterPages\SiteMaster.master(71): error BC30561: 'Globalization' is ambiguous, imported from the namespaces or types 'System.Web, System'.
at System.Web.Compilation.BuildManager.PostProcessFoundBuildResult(BuildResult result, Boolean keyFromVPP, VirtualPath virtualPath)
at System.Web.Compilation.BuildManager.GetBuildResultFromCacheInternal(String cacheKey, Boolean keyFromVPP, VirtualPath virtualPath, Int64 hashCode, Boolean ensureIsUpToDate)
at System.Web.Compilation.BuildManager.GetVPathBuildResultFromCacheInternal(VirtualPath virtualPath, Boolean ensureIsUpToDate)
at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate)
at System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean ensureIsUpToDate)
at System.Web.UI.BaseTemplateParser.GetReferencedType(VirtualPath virtualPath, Boolean allowNoCompile)
at System.Web.UI.PageParser.ProcessMainDirectiveAttribute(String deviceName, String name, String value, IDictionary parseData)
at System.Web.UI.TemplateParser.ProcessMainDirective(IDictionary mainDirective)
Dies ist die Codezeile:
$.SetLanguage("<%= Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName %>");
Ersetzen Globalization
mit System.Globalization
das Problem behebt, aber Visual Studio schlägt vor, dass der "Name vereinfacht werden kann", System
ist nicht erforderlich.
Wenn Sie einen Haltepunkt an der Linie säumige Einstellung, kann ich den gleichen Fehler über das Direkt-Fenster erhalten:
Globalization.CultureInfo.CurrentUICulture
error BC30560: 'CultureInfo' is ambiguous in the namespace 'System.Globalization'.
Wenn ich richtig verstehe, die beide dort System.Globalization
und System.Web.Globalization
ist. Laut the API diff wurde ein neuer Namespace eingeführt, der dieses Problem zu verursachen scheint.
+namespace System.Web.Globalization { + public interface IStringLocalizerProvider { + string GetLocalizedString(CultureInfo culture, string name, params object[] arguments); + } + public sealed class ResourceFileStringLocalizerProvider : IStringLocalizerProvider { + public const string ResourceFileName = "DataAnnotation.Localization"; + public ResourceFileStringLocalizerProvider(); + public string GetLocalizedString(CultureInfo culture, string name, params object[] arguments); + } + public static class StringLocalizerProviders { + public static IStringLocalizerProvider DataAnnotationStringLocalizerProvider { get; set; } + } +}
Warum nur, dass dieser Fehler zur Laufzeit erscheinen? Wie kann ich es zum Kompilieren fehlschlagen lassen?
Scheint die störende Zeile ist Inline-Code in Aspx-Seite, die während der ersten Anfrage kompiliert wird. Sie können mit aspnet_compiler.exe Ihre Webanwendung vorkompilieren, und Sie sollten den Fehler sehen. – mattfei
Das gleiche Problem bekomme ich. Der Code funktionierte gut, aber nach der Neuinstallation von VS und allen anderen Dingen, fing er an, denselben Fehler zu geben. aber ich habe nach der Installation von Framework 4.5.2. Hast du die Lösung gefunden? – par
@par Die Lösung besteht darin, den Typ vollständig zu qualifizieren und Visual Studio zu ignorieren, wenn der Name vereinfacht werden kann.Ich nehme an, es ist auch kein Problem, wenn Ihr Projekt auf 4.6.2 abzielt, aber ich habe es noch nicht ausprobiert. – Stijn