2016-08-08 40 views
13

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?

+0

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

+0

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

+0

@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

Antwort

3

Wir haben die "Globalisierung" entfernt. und lassen Sie Visual Studio eine Korrektur vorschlagen. Wir haben "Import System.Globalization" ausgewählt, das es für uns zur Datei hinzugefügt hat.

Dies wurde der Fehler los und die Website funktioniert OK.

+1

Ich kann VS nicht bekommen, um mir eine Lösung vorzuschlagen, gibt es keine schnellen Aktionen zur Verfügung. – Stijn

6

Die Antwort von Bug Crusher ist korrekt. Um Stijns Kommentar zu beantworten, suchen Sie einfach in Ihrem Projekt nach "Globalisierung". und entferne jede Instanz davon. Ich würde Find + Replace nicht verwenden, um dies zu tun, da dies unbeabsichtigte Nebenwirkungen haben kann.

Stellen Sie dann sicher, dass jede Datei, die Sie bearbeitet haben, die korrekte Import- oder Verwendungs-Anweisung oben hat.

VB- Imports System.Globalization

C# - System.Globalization verwendet;

Das ist der Fix VS hätte vorgeschlagen.