Mono XSP4和XSP错误有所不同?出了什么问题?

时间:2015-06-01 20:03:08

标签: c# asp.net .net asp.net-mvc-4 mono

我目前正在使用Digital Ocean运行Ubuntu 14.04,并且有兴趣设置Mono以使用某些.NET代码。我目前是.NET的新手,但我认为在线设置服务器可以查看我的代码。并不是说在我自己的计算机上看到我的更改是不好的,但我想找到一个部署我的项目的地方。我已经支付托管费用,并且我不想为IIS花更多钱,所以我认为这可能是一个快速的解决方案。有人告诉我,XSP对于在浏览器中暂时测试您的Web应用程序非常有用。 XSP似乎对我的Linux系统没有正常工作。我需要一些帮助。

安装以下软件包之后,我一直在本地发布这些项目,然后通过SFTP将它们添加到我自己的目录中的服务器上。此目录已设置为A记录,并已使用以下位置的虚拟主机文件进行配置(/ etc / apache2 / sites-available)。

我的服务器上安装了以下软件包:

  1. 单完整
  2. 单devel的
  3. referenceassemblies-PCL
  4. 我曾尝试将MVC4项目添加到我的服务器,但这会导致服务器上出现一些错误。我认为,如果我安装了OWIN,这将解决这个MVC4 Web应用程序的特殊问题,但我仍然收到错误。 MVC3创建了类似的错误。进入目录文件夹并使用命令" xsp"和" xsp4"返回不同的错误。

    目前,运行一个没有使用.NET framework 4.0添加任何内容的干净Web表单会导致以下错误:

    **XSP:** System.TypeLoadException
    Could not load type 'System.Web.UI.ScriptResourceDefinition' from assembly 'System.Web.Extensions, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35'.<br/>
    **Stack Trace**: 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) [0x00000] in <filename unknown>:0 
    
    **XSP 4:** System.ArgumentException
    An item with the same key has already been added.<br/>
    **Stack Trace:** at System.ThrowHelper.ThrowArgumentException (ExceptionResource resource) [0x00000] in <filename unknown>:0 
      at System.Collections.Generic.Dictionary`2[System.String,System.Web.Routing.RouteBase].Insert (System.String key, System.Web.Routing.RouteBase value, Boolean add) [0x00000] in <filename unknown>:0 
      at System.Collections.Generic.Dictionary`2[System.String,System.Web.Routing.RouteBase].Add (System.String key, System.Web.Routing.RouteBase value) [0x00000] in <filename unknown>:0 
      at System.Web.Routing.RouteCollection.Add (System.String name, System.Web.Routing.RouteBase item) [0x00000] in <filename unknown>:0 
      at Microsoft.AspNet.FriendlyUrls.RouteCollectionExtensions.EnableFriendlyUrls (System.Web.Routing.RouteCollection routes, Microsoft.AspNet.FriendlyUrls.FriendlyUrlSettings settings, Microsoft.AspNet.FriendlyUrls.Resolvers.IFriendlyUrlResolver[] resolvers) [0x00000] in <filename unknown>:0 
      at Microsoft.AspNet.FriendlyUrls.RouteCollectionExtensions.EnableFriendlyUrls (System.Web.Routing.RouteCollection routes, Microsoft.AspNet.FriendlyUrls.FriendlyUrlSettings settings) [0x00000] in <filename unknown>:0 
      at WebApplication2.RouteConfig.RegisterRoutes (System.Web.Routing.RouteCollection routes) [0x00000] in <filename unknown>:0 
      at WebApplication2.Global.Application_Start (System.Object sender, System.EventArgs e) [0x00000] in <filename unknown>:0 
      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) [0x00000] in <filename unknown>:0 
    

    我的理论包括:

    1. 没有安装MONO所需的一切
    2. 需要添加其他依赖项
    3. 以错误的方式启动此应用程序
    4. 不知怎的,我需要在特定的IP和/或端口上进行单声道侦听? (见下文)
    5. 我错过了一步
    6. 我没有使用Xamarin发布我的项目。
    7. 此外,当我启动XSP或XSP4时,我的终端会告诉我以下内容:

      Listening on address: 0.0.0.0 <br/>
      Root Directory: /var/www/ms <br/>
      Listening on port: 8080 (non-secure)
      

      另外,请不要告诉我,我没有添加足够的信息。请耐心等待我,并询问我可以为您解决此问题的具体信息。我不了解.NET环境的所有内容,而且非常新。

1 个答案:

答案 0 :(得分:1)

这非常合理。

  • ASP.NET MVC需要.NET 4.0及更高版本(有时后来成为.NET 4.5),因此在XSP(基于.NET 2)中运行任何此类应用程序必须以您获得的异常结束,因为XSP和.NET 2兼容Mono中的CLR无法容纳它们。
  • Mono 3中的XSP4和.NET 4兼容CLR(我假设您使用默认的Ubuntu存储库来安装Mono)是旧的和错误的,以完全托管此类应用程序。当时微软从未对Mono测试过他们的框架,而.NET Framework则不是开源的。

如果可能,您可以执行以下操作,

  1. 使用Xamarin存储库安装Mono 4(4.0.1是写作时的最新版本),www.mono-project.com / download / #download-lin

  2. 如果Mono 4.0.1仍然失败,您可以试用.NET Core和ASP.NET 5. Microsoft开放源代码.NET Core和ASP.NET 5,具有完整的Linux / OS X覆盖范围,因此&#39 ; s将成为你所依赖的动力。