2014-07-21 13 views
31

Wenn ich meine ASP.NET MVC 4-Website auf meinem Fedora 20-Arbeitsplatz mit xsp4 (von MonoDevelop oder direkt) ausführen, bekomme ich die folgende Ausnahme:Zugriff auf den Pfad "/ etc/mono/registry" ist verweigert

System.Web.HttpRuntime.FinishWithException (wr={Mono.WebServer.XSPWorkerRequest}, e={System.Web.HttpException: ---> System.Web.HttpException: The pre-application start initialization method Start on type System.Web.WebPages.PreApplicationStartCode threw an exception with the following error message: Exception has been thrown by the target of an invocation. ---> System.Reflection.TargetInvocationException: Exception has been thrown by the target of an invocation. ---> System.TypeInitializationException: An exception was thrown by the type initializer for <Module> ---> System.Security.SecurityException: No access to the given key ---> System.UnauthorizedAccessException: Access to the path "/etc/mono/registry" is denied. 
at System.IO.Directory.CreateDirectoriesInternal (System.String path) [0x00064] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/System.IO/Directory.cs:113 
at System.IO.Directory.CreateDirectory (System.String path) [0x000a4] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/System.IO/Directory.cs:80 
at System.IO.DirectoryInfo.Create() [0x00000] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/System.IO/DirectoryInfo.cs:141 
at (wrapper remoting-invoke-with-check) System.IO.DirectoryInfo:Create() 
at System.IO.Directory.CreateDirectoriesInternal (System.String path) [0x00039] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/System.IO/Directory.cs:98 
at System.IO.Directory.CreateDirectory (System.String path) [0x000a4] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/System.IO/Directory.cs:80 
at Microsoft.Win32.KeyHandler..ctor (Microsoft.Win32.RegistryKey rkey, System.String basedir, Boolean is_volatile) [0x0004a] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/Microsoft.Win32/UnixRegistryApi.cs:136 
--- End of inner exception stack trace --- 
at Microsoft.Win32.KeyHandler..ctor (Microsoft.Win32.RegistryKey rkey, System.String basedir, Boolean is_volatile) [0x00057] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/Microsoft.Win32/UnixRegistryApi.cs:138 
at Microsoft.Win32.KeyHandler..ctor (Microsoft.Win32.RegistryKey rkey, System.String basedir) [0x00000] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/Microsoft.Win32/UnixRegistryApi.cs:116 
at Microsoft.Win32.KeyHandler.Lookup (Microsoft.Win32.RegistryKey rkey, Boolean createNonExisting) [0x000cc] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/Microsoft.Win32/UnixRegistryApi.cs:412 
at Microsoft.Win32.UnixRegistryApi.OpenSubKey (Microsoft.Win32.RegistryKey rkey, System.String keyname, Boolean writable) [0x00000] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/Microsoft.Win32/UnixRegistryApi.cs:836 
at Microsoft.Win32.RegistryKey.OpenSubKey (System.String name, Boolean writable) [0x0001e] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/Microsoft.Win32/RegistryKey.cs:278 
at Microsoft.Win32.RegistryKey.OpenSubKey (System.String name) [0x00000] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/Microsoft.Win32/RegistryKey.cs:262 
at (wrapper remoting-invoke-with-check) Microsoft.Win32.RegistryKey:OpenSubKey (string) 
at Microsoft.Web.Infrastructure.RegistryKeyWrapper.OpenSubKey (System.String name) [0x00000] in <filename unknown>:0 
at Microsoft.Web.Infrastructure.KillBitHelper.GetKillBittedVersions() [0x00000] in <filename unknown>:0 
at Microsoft.Web.Infrastructure.KillBitHelper.IsThisAssemblyKillBitted() [0x00000] in <filename unknown>:0 
at Microsoft.Web.Infrastructure.KillBitHelper.ThrowIfKillBitIsSet() [0x00000] in <filename unknown>:0 
at Microsoft.Web.Infrastructure.ModuleInitializer+CriticalInitializer.CheckKillBit() [0x00000] in <filename unknown>:0 
at Microsoft.Web.Infrastructure.ModuleInitializer+CriticalInitializer.Initialize() [0x00000] in <filename unknown>:0 
at Microsoft.Web.Infrastructure.ModuleInitializer.Initialize() [0x00000] in <filename unknown>:0 
at <Module>..cctor() [0x00000] in <filename unknown>:0 
--- End of inner exception stack trace --- 
at System.Web.WebPages.PreApplicationStartCode.Start() [0x0002b] in /builddir/build/BUILD/mono-3.4.0/external/aspnetwebstack/src/System.Web.WebPages/PreApplicationStartCode.cs:40 
at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) 
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00054] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/System.Reflection/MonoMethod.cs:230 
--- End of inner exception stack trace --- 
at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) [0x00069] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/System.Reflection/MonoMethod.cs:238 
at System.Reflection.MethodBase.Invoke (System.Object obj, System.Object[] parameters) [0x00000] in /builddir/build/BUILD/mono-3.4.0/mcs/class/corlib/System.Reflection/MethodBase.cs:114 
at System.Web.Compilation.BuildManager.CallPreStartMethods() [0x0004f] in /builddir/build/BUILD/mono-3.4.0/mcs/class/System.Web/System.Web.Compilation/BuildManager.cs:561 
--- End of inner exception stack trace --- 
at System.Web.Compilation.BuildManager.CallPreStartMethods() [0x0007e] in /builddir/build/BUILD/mono-3.4.0/mcs/class/System.Web/System.Web.Compilation/BuildManager.cs:564 
at System.Web.HttpApplicationFactory.InitType (System.Web.HttpContext context) [0x00059] in /builddir/build/BUILD/mono-3.4.0/mcs/class/System.Web/System.Web/HttpApplicationFactory.cs:408 
--- End of inner exception stack trace ---}) in /builddir/build/BUILD/mono-3.4.0/mcs/class/System.Web/System.Web/HttpRuntime.cs:674 

ich habe geprüft, und es gibt keine registry Datei oder einen Ordner in /etc/mono/. Ich kann es auch in keinem Unterordner finden. Wie kann ich diese Frage lösen?

Ich bin mit Fedora 20 mit dem neuesten 3.15.6 Kernel

$ mono --version 
Mono JIT compiler version 3.4.0 (tarball Fri Jun 27 17:26:36 UTC 2014) 
Copyright (C) 2002-2014 Novell, Inc, Xamarin Inc and Contributors. www.mono-project.com 
    TLS:   __thread 
    SIGSEGV:  altstack 
    Notifications: epoll 
    Architecture: amd64 
    Disabled:  none 
    Misc:   softdebug 
    LLVM:   supported, not enabled. 
    GC:   sgen 

$ xsp4 --version 
xsp4.exe 3.0.0.0 
Copyright (C) 2002-2011 Novell, Inc. 
Minimalistic web server for testing System.Web 

Ich habe eine andere Einrichtung in Ubuntu 14.04 LTS und dass man arbeitet, so dass es etwas mit der Mono-Version sein könnte, oder vielleicht ich fehlt eine Bibliothek?

Antwort

61

Schaltet einfach den Ordner mkdir

sudo mkdir /etc/mono/registry

und Einstellen der richtigen Berechtigungen mit chmod

sudo chmod uog+rw /etc/mono/registry

funktioniert der Trick mit der Erstellung aus.

Allerdings verstehe ich immer noch nicht, wo ein solcher Ordner in Ubuntu versteckt ist und warum er dort nicht erstellt werden muss und warum er nicht automatisch während der Installation erstellt wird.

+7

In meinem Fall hatte ich 'sudo chmod uog + rw/etc/Mono/registry' zu tun. Danke für die Hilfe! –

+0

@peter - Ich versuche, dieses Verzeichnis zu erstellen, aber es wird verweigert. Aber ich bin der PC-Administrator. – xameeramir

+0

Haben Sie den Befehl als Sudo ausgeführt? – peter

1

Sie können MONO_REGISTRY_PATH auf ein Verzeichnis verweisen, die Sie steuern:

bash mkdir my-registry MONO_REGISTRY_PATH=`pwd`/my-registry xsp4