mod_mono asp MVC4错误:System.Security.SecurityException - 无法模拟令牌

时间:2016-02-11 22:13:26

标签: asp.net linux asp.net-mvc-4 mono mod-mono

我在ASP.net MVC4中开发了一个小型webapp,框架版本为4.5。在使用Visual Studio 2015进行调试时,这一切都像是一个魅力。但是我没有Windows服务器,而是Linux(Ubuntu 14.04 VPS),我希望在那里部署。

我有最新的mono和mod_mono与apache2一起运行。它似乎应该执行,但我得到一些错误。

我通过添加<customError mode="off">解决了其中的第一个问题,看到了错误,然后添加了mono/register文件夹。

但我现在被这个错误困扰了:

System.Security.SecurityException
Couldn't impersonate token.

Description: HTTP 500.Error processing request.
Details: Non-web exception. Exception origin (name of application or object): mscorlib.
Exception stack trace:
  at System.Security.Principal.WindowsImpersonationContext..ctor (IntPtr token) <0x41ef9dd0 + 0x0006f> in <filename unknown>:0 
  at System.Security.Principal.WindowsIdentity.Impersonate (IntPtr userToken) <0x41ef9d50 + 0x0003c> in <filename unknown>:0 
  at System.CodeDom.Compiler.Executor.ExecWaitWithCapture (IntPtr userToken, System.String cmd, System.String currentDir, System.CodeDom.Compiler.TempFileCollection tempFiles, System.String& outputName, System.String& errorName) <0x41ef9c90 + 0x00038> in <filename unknown>:0 
  at Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Compiler.Compile (System.CodeDom.Compiler.CompilerParameters options, System.String compilerFullPath, System.String arguments, System.String& outputFile, System.Int32& nativeReturnValue) <0x41ef9a10 + 0x0010b> in <filename unknown>:0 
  at Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Compiler.FromFileBatch (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) <0x41ef5c40 + 0x005fb> in <filename unknown>:0 
  at Microsoft.CodeDom.Providers.DotNetCompilerPlatform.Compiler.CompileAssemblyFromFileBatch (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) <0x41ef5aa0 + 0x000c7> in <filename unknown>:0 
  at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromFile (System.CodeDom.Compiler.CompilerParameters options, System.String[] fileNames) <0x41ef58f0 + 0x0004d> in <filename unknown>:0 
  at System.Web.Compilation.AssemblyBuilder.BuildAssembly (System.Web.VirtualPath virtualPath, System.CodeDom.Compiler.CompilerParameters options) <0x41ee0a70 + 0x00991> in <filename unknown>:0 
  at System.Web.Compilation.AssemblyBuilder.BuildAssembly (System.Web.VirtualPath virtualPath) <0x41ee0a30 + 0x00023> in <filename unknown>:0 
  at System.Web.Compilation.BuildManager.GenerateAssembly (System.Web.Compilation.AssemblyBuilder abuilder, System.Web.Compilation.BuildProviderGroup group, System.Web.VirtualPath vp, Boolean debug) <0x41ed6b10 + 0x009b7> in <filename unknown>:0 
  at System.Web.Compilation.BuildManager.BuildInner (System.Web.VirtualPath vp, Boolean debug) <0x41eac440 + 0x00523> in <filename unknown>:0 
  at System.Web.Compilation.BuildManager.Build (System.Web.VirtualPath vp) <0x41eabbc0 + 0x0011b> in <filename unknown>:0 
  at System.Web.Compilation.BuildManager.GetCompiledType (System.Web.VirtualPath virtualPath) <0x41eaaa70 + 0x00093> in <filename unknown>:0 
  at System.Web.Compilation.BuildManager.GetCompiledType (System.String virtualPath) <0x41eaa690 + 0x00017> in <filename unknown>:0 
  at System.Web.HttpApplicationFactory.InitType (System.Web.HttpContext context) <0x41e9c4a0 + 0x0041b> in <filename unknown>:0 

我无法解决该错误。我尝试了以下步骤:

  • 将项目发布到本地文件夹并将其复制到我的Linux
  • 服务器获取整个项目并添加到Linux服务器构建
  • 使用xbuild的Linux上的整个项目

哪一个都给出了相同的运行时错误。

我已经使用Travis CI检查我的代码并通过了以下配置:

language: CSharp
solution: BannedFromHighsec.sln
script:
    - nuget restore BannedFromHighsec.sln
    - xbuild /p:Configuration=Release /target:BannedFromHighsec BannedFromHighsec.sln /p:TargetFrameworkVersion="v4.5" /p:DebugSymbols=False

Travis CI日志的Pastebin:http://pastebin.com/5s6p97i3

所以我有点想到这是我的代码有问题。但我不确定它是什么,因为它是一个简单的应用程序。使用SQlite进行基本的CRUD操作,并从API和第二个数据库中提取数据。我没有使用登录或任何东西。

我希望有人可以帮助我,我开始掌握asp.net MVC,并且想知道如果可能的话,如何在linux上部署它。 :)

如果您需要任何其他信息,配置,源代码让我知道,我很乐意给它。只是不确定该错误代码需要什么。

2 个答案:

答案 0 :(得分:12)

我首先要说我的设置与你的设置不一样。我有一个在Raspberry Pi 2上使用.NET 4.5.2的ASP.NET MVC网站,运行Raspbian Jessie(2016年2月版)。这个发行版的股票单声道是3.2.8,但我将我升级到4.2.2。

因此,我遇到了与我尝试运行测试站点时完全相同的错误消息。什么对我有用,正在评论&lt;编译器&gt;我的web.config中的条目如下所示。

<system.codedom>
  <compilers>
    <!--
    <compiler language="c#;cs;csharp" extension=".cs" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.CSharpCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:6 /nowarn:1659;1699;1701" />
    <compiler language="vb;vbs;visualbasic;vbscript" extension=".vb" type="Microsoft.CodeDom.Providers.DotNetCompilerPlatform.VBCodeProvider, Microsoft.CodeDom.Providers.DotNetCompilerPlatform, Version=1.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" warningLevel="4" compilerOptions="/langversion:14 /nowarn:41008 /define:_MYTYPE=\&quot;Web\&quot; /optionInfer+" />
    -->
  </compilers>
</system.codedom>

然后重置apache服务

sudo service apache2 restart

之后,MVC网站加载得很好。

我不能说这是一个完美的解决方案,因为我不确定为什么评论出那些xml工作线。如果这对你有用,那很好但是我希望有人可以向我解释为什么这两行xml是造成这个问题的原因。

答案 1 :(得分:1)

将编译器条目注释为已接受的答案建议有效禁用Microsoft.CodeDom.Providers.DotNetCompilerPlatform NuGet包 - 如果您计划仅在单声道上运行您的网站,最好将其卸载加Microsoft.Net.Compilers(前者的依赖性)完全没有用 - mono可能与它不兼容,它有自己的服务API编译器。