【问题标题】:No owin.Environment item was found in the context在上下文中找不到 owin.Environment 项
【发布时间】:2013-08-14 13:05:14
【问题描述】:

Microsoft 最近introduced 新的 ASP.NET 标识 - 替换旧的(简单)成员。不幸的是,我不能在我的旧项目中使用这个新的会员系统,因为它会抛出 System.InvalidOperationException: No owin.Environment item was found in the context。这是一个已知的bug,但微软对此问题保持沉默。重现此错误的最简单方法 - 它是在 VS 2013 中创建一个新的 Web 应用程序(MVC、WebForms 或 WebApi - 无关紧要)(使用 Web Tools 2013 Preview Refresh),然后转到登录页面。它会起作用的。然后将应用程序中的命名空间更改为原始命名空间以外的任何其他名称,登录页面将引发该错误。将名称空间改回原始名称(您在创建项目时使用的名称)将解决此问题。

看起来 .net 存储了与原始命名空间相关的某些内容,但我找不到内容和位置,它不在项目文件夹中。我知道 stackoverflow 不是一个错误报告的地方,我只是希望有人已经找到了解决这个问题的方法,或者参与 ASP.NET Identity 开发的人会看到这一点。

【问题讨论】:

标签: asp.net .net owin katana asp.net-identity


【解决方案1】:

它很可能找不到 OWIN Startup 类。 Startup 类的默认约定是 [AssemblyName].Startup。如果您不再遵循该约定,则需要在 Web.Config 中指定 Startup 类的全名。

Microsoft.Owin.Host.SystemWeb 包的下一个版本现在会在找不到 Startup 类时引发详细的异常消息。

【讨论】:

  • 在 web.config 中添加 解决了这个问题。谢谢!
  • @pranavrastogi 投票否决缺少信息!
  • @graycrow 此评论必须是回答!非常感谢。
【解决方案2】:

我遇到了同样的问题,在确保此行在 web.config 中后已修复:

<add key="owin:AutomaticAppStartup" value="true" />

【讨论】:

    【解决方案3】:

    我遇到了完全相同的错误,但事实证明我的 web.config 中还有另一个配置问题。我的 web.config 在 system.web 下的编译元素中缺少属性 defaultLanguage="c#"。

    在这种情况下,它将默认为 VB。因此,除非您的 Startup 类是用 VB 编写的,否则您应该将默认语言更改为 C#。

    不正确:

    <compilation debug="true" optimizeCompilations="true" targetFramework="4.6.1">
    

    这是正确的(除非您使用 VB):

    <compilation debug="true" defaultLanguage="c#" optimizeCompilations="true" targetFramework="4.6.1">
    

    【讨论】:

    • 谢谢。这通过 EPiServer Alloy 项目为我解决了这个问题。
    • 标签应该关闭。谢谢!
    • 你到底是怎么想出来的?
    • 我们先尝试了其他所有方法,我们中的两个人就像“这个解决方案无法解决问题”,它确实做到了。我和 r3mark 在一起“你到底是怎么想出来的?”
    【解决方案4】:

    我创建了两个名为 TesteMvc5.2 和 TesteMvc5.0 的新项目,但它们在开始时都无法正常工作

    这是因为默认命名空间与程序集名称不同。 但是在我放线之后

    <add key="owin:AppStartup" value="TesteMvc5._2.Startup, TesteMvc5.2" />
    

    在 web.config 上运行良好。

    【讨论】:

      【解决方案5】:

      清理 ASP.NET 临时文件帮助我解决了这个确切的问题

      【讨论】:

      • 删除此特定文件夹的内容对我有用:c:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files
      • 我也在我们的一台开发机器上看到了这个问题,当时这似乎解决了这个问题。发生此错误的原因一定有很多,因此有很多解决方案。
      【解决方案6】:

      我尝试了此页面上提到的所有内容,但没有任何效果。然后我发现了 IIS 中名为 owin:AutomaticAppStartup 的设置。您可以在默认网站的 IIS 管理器的应用程序设置页面中找到它。检查该设置是否为真。如果没有设置为真。这对我有用。

      这是我找到答案的网站: http://gotoanswer.stanford.edu/?q=Microsoft.Owin.Host.SystemWeb+and+still+getting+No+owin.Environment+item+was+found+in+the+context

      【讨论】:

      • 所以实际上有两个步骤:1添加Luiz建议的 2.
      • Arvind,您能否发布更多您的 web.config 以展示其工作原理?谢谢!
      • @Ron,该链接已损坏
      • @ArvindSingh - 您的解决方案非常完美。我们有一个子应用程序作为主网站的一部分托管,虽然我们必须执行通常的“inheritinchildapplications = false”,但子应用程序过去常常失败(不是所有时间)并出现此错误所以例如它有 50% 的时间工作它有 50% 的时间抱怨 OWIN。这个应用程序大约 3 年没有动过。虽然它与其他解决方案在服务器上本地运行良好,但当您从域名访问它时它不会,因此这两个语句完美地结合在一起。
      【解决方案7】:

      我也有同样的问题。我用 web.config 修复了它。

      但是我已经更改了程序集名称和命名空间,并且在任何地方都找不到原始程序集名称。

      然后我发现 clean 并没有从 bin 中删除原始程序集。

      删除垃圾箱后,我能够删除 web.config OWIN 条目。

      【讨论】:

      • 清理 bin 和 obj 目录也对我有用(结合 web.config 更改)。
      【解决方案8】:

      如果您碰巧从 MVC4 复制了以下配置,则应将其从 web.config 中删除

      <add key="owin:AutomaticAppStartup" value="false" />
      

      【讨论】:

      • 这为我修好了。
      【解决方案9】:

      以上答案都不适合我。

      原来我的项目缺少包含以下内容的“启动”类:

      using Microsoft.Owin;
      using Owin;
      
      [assembly: OwinStartupAttribute(typeof(NAMESPACE.Startup))]
      namespace NAMESPACE
      {
          public partial class Startup
          {
              public void Configuration(IAppBuilder app)
              {
                  ConfigureAuth(app);
              }
          }
      }
      

      这个名为“Startup.cs”的文件位于项目的根文件夹 (~/) 中。

      我的“Web.config”没有在其他回复中发布任何这种“Owin”配置。

      【讨论】:

      • 无需在配置中添加Configure(app)。没有它也可以工作。
      【解决方案10】:

      有同样的问题。感谢您分享的解决方案。 这..

      <add key="owin.AppStartup" value="Namespace.Startup, Namespace"/>
      <add key="owin:AutomaticAppStartup" value="false"/>  
      

      为我修复

      【讨论】:

      • 跨度>
      • 请注意,您应该使用自己的命名空间更改命名空间,第二个 [Namespace] 使用您的程序集的名称
      【解决方案11】:

      我不知道为什么会这样,但确实有效!

      我的问题出在 VS2013 中。在 WebConfig 中,调试设置为 true,我得到了那个错误。当我将它设置为 false 时它工作正常,然后我重置为 true 并且它继续正常工作!

      起初,当 debug 在更改为 false 之前为 true 时,我在 StartUp 代码中设置了一个断点,但根本没有到达。更改为 false 后按保存,然后返回 true,调用 StartUp 代码,程序正常运行。

      【讨论】:

        【解决方案12】:

        我在 Optimizely (Episerver) 解决方案中遇到此错误,其中我有两个使用相同 CMS 数据库的功能分支。在一个功能分支中,我正在使用访问者标准进行概念验证。所以我创造了这样的东西:

            public class SomeVisitorCriterionSettings : CriterionModelBase
            {
                public override ICriterionModel Copy()
                {
                    return base.ShallowCopy();
                }
            }
        
        
        
        [VisitorGroupCriterion(
            Category = "Some category",
            DisplayName = "My visitor criterion")]
        public class SomeVisitorCriterion : CriterionBase<SomeVisitorCriterionSettings>
        {
            public override bool IsMatch(IPrincipal principal, HttpContextBase httpContext)
            {
                // match logic here..
            }
        }
        

        在 Episerver -> CMS -> 访客组中,我创建了此访客标准的实例。切换到另一个不存在此代码但数据库中的实例存在的分支后,抛出了Owin异常。

        删除 CMS 中的访问者标准解决了这个问题,但老实说,我不知道为什么会抛出这种异常。不过我很想知道..

        【讨论】:

          【解决方案13】:

          在 web.config 中为编译添加默认语言为我做了这件事!

          【讨论】:

          • 欢迎来到 Stack Overflow。您应该在答案中添加一些描述。一句话通常是不够的。
          • defaultLanguage 设置为 C# 很重要
          • 那么它与您前一年创建的答案完全相同吗? stackoverflow.com/a/35849641/2170171
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2018-09-25
          • 1970-01-01
          相关资源
          最近更新 更多