Microsoft最近introduced新的ASP.NET标识 - 替换旧的(简单)成员资格。不幸的是,我不能在我的旧项目中使用这个新的成员资格系统,因为它抛出System.InvalidOperationException:在上下文中找不到owin.Environment项。这是一个众所周知的bug,但微软对这个问题保持沉默。重现此错误的最简单方法 - 在VS 2013(使用Web Tools 2013 Preview Refresh)创建新的Web应用程序(MVC,WebForms或WebApi - 无关紧要),然后转到登录页面。它会工作。然后将应用程序中的命名空间更改为原始命名空间以外的任何内容,登录页面将抛出该错误将名称空间更改回原始名称(您在创建项目时使用的名称空间)将解决此问题。
看起来.net存储某些与原始命名空间相关的东西,但我找不到它在哪里,它不在项目文件夹中。我知道stackoverflow不是bug报告的地方,我只是希望有人已经找到了解决这个问题的方法,或者参与ASP.NET身份开发的人会看到这个。
答案 0 :(得分:26)
很可能找不到OWIN Startup类。 Startup类的默认约定是[AssemblyName] .Startup。如果您不再遵循该约定,则需要在Web.Config中指定Startup类的全名。
当找不到Startup类时,Microsoft.Owin.Host.SystemWeb包的下一个版本现在会抛出详细的异常消息。
答案 1 :(得分:8)
我创建了两个名为TesteMvc5.2和TesteMvc5.0的新项目,两个项目都没有开始工作
这是因为默认命名空间与程序集名称不同。 但在我把线放后
<add key="owin:AppStartup" value="TesteMvc5._2.Startup, TesteMvc5.2" />
在web.config上运行正常。
答案 2 :(得分:8)
我有完全相同的错误,但事实证明我的web.config中有另一个配置问题。我的web.config缺少属性defaultLanguage =&#34; c#&#34;在system.web。
下的编译元素中在这种情况下,它将默认为VB。因此,除非您使用VB编写Startup类,否则应将默认语言更改为C#。
不正确:
<compilation debug="true" optimizeCompilations="true" targetFramework="4.6.1">
这是正确的(除非你使用VB):
<compilation debug="true" defaultLanguage="c#" optimizeCompilations="true" targetFramework="4.6.1">
答案 3 :(得分:6)
我有同样的问题,确认此行在web.config中后修复:
<add key="owin:AutomaticAppStartup" value="true" />
答案 4 :(得分:4)
我尝试了此页面上提到的所有内容,但没有任何效果。然后我发现IIS中名为owin的设置:AutomaticAppStartup。您可以在IIS管理器的“应用程序设置”页面中找到默认网站。检查该设置是否为真。如果未设置为true。这对我有用。
答案 5 :(得分:3)
我有同样的问题。我用web.config修复了它。
但是我已经更改了程序集名称和命名空间,并且在任何地方都找不到原始程序集名称。
然后我发现干净并没有从垃圾箱中移除原始组件。
Aftter删除bin垃圾,我能够删除web.config OWIN条目。
答案 6 :(得分:2)
清理ASP.NET临时文件帮助我解决了这个问题
答案 7 :(得分:1)
如果您碰巧从MVC4复制了以下配置,则应将其从web.config中删除
<add key="owin:AutomaticAppStartup" value="false" />
答案 8 :(得分:0)
有同样的问题。感谢您的共享解决方案。 这个..
<add key="owin.AppStartup" value="Namespace.Startup, Namespace"/> <add key="owin:AutomaticAppStartup" value="false"/>
为我修好了
答案 9 :(得分:0)
我不知道为什么这行得通,但是行得通!
我的问题是在VS2013中。在WebConfig中,将debug设置为true,然后收到该错误。当我将其设置为false时,它可以正常工作,然后我重置为true,它继续可以正常工作!
起初,当debug为true之前,将其更改为false,然后在StartUp代码中添加了一个断点,但根本没有达到。更改为false后,按Save(保存),然后再返回true,则调用StartUp代码,程序将按预期运行。
答案 10 :(得分:0)
以上所有答案对我都没有作用。
原来,我的项目缺少包含以下内容的“启动”类:
state.blocks.hash
名为“ Startup.cs”的文件位于项目的根文件夹(〜/)中。
我的“ Web.config”在其他答复中都没有张贴任何“ Owin”配置。
答案 11 :(得分:0)
我在 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 中删除访问者标准解决了这个问题,但老实说,我不知道为什么会抛出这种异常。不过我很想知道..
答案 12 :(得分:-1)
在web.config中为编译添加默认语言为我做了!