【问题标题】:Asp.Net MVC 5 without Owin?没有 Owin 的 Asp.Net MVC 5?
【发布时间】:2015-10-18 08:28:27
【问题描述】:

Mvc 5 似乎依赖于 Owin,如果您想自托管或在 Mac 上运行,这非常棒。但是让我们假设我只想像以前的版本一样在 IIS 下运行,并且我对 Owin 提供的功能不感兴趣。默认的“空白”mvc5 模板使用 owin 和 15 个其他依赖项。我已经尝试一个一个地删除包,但如果不使用 Owin 的属性,该站点似乎不知道如何开始。那么,如何在没有 Owin 的 iis 下获得 ASP.net、mvc 5?

【问题讨论】:

  • 您的问题相当于“如何在没有 Asp.Net vNext 框架的情况下运行 Asp.Net MVC 5”。
  • @Aron 除非 Owin 现在是 Asp.Net 的一个组成部分,没有它就不能使用,不,这不是我的问题。

标签: c# iis asp.net-mvc-5 owin


【解决方案1】:

禁用 Owin 的简单方法是在 web.config 文件和 <appSettings> 部分添加:

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

要完全删除 Owin,请右键单击您的项目,然后从菜单中单击 Manage Nuget Packages。在Manage Nuget Packages 窗口的左侧单击Installed Package,然后在窗口右侧的搜索框中键入owin

按以下顺序卸载软件包:

  • microsoft.aspnet.identity.owin
  • microsoft.owin.host.systemweb
  • microsoft.owin.security.cookies
  • microsoft.owin.security.facebook
  • microsoft.owin.security.google
  • microsoft.owin.security.microsoftaccount
  • microsoft.owin.security.twitter

并在删除microsoft.owin.security.twitter 后自动删除其他 owin 包,如果它没有在您的机器上发生,请自行删除其他包。 然后删除这个包:

  • microsoft.aspnet.identity.entityframework
  • microsoft.aspnet.identity.core

打开web.config 文件并从<runtime><assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1"> 中删除这些部分:

    <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security.OAuth" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security.Cookies" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>
      <dependentAssembly>
        <assemblyIdentity name="Microsoft.Owin.Security" publicKeyToken="31bf3856ad364e35" />
        <bindingRedirect oldVersion="1.0.0.0-3.0.0.0" newVersion="3.0.0.0" />
      </dependentAssembly>

删除项目根目录中的Startup.cs 文件。打开 App_Start folder 并删除 IdentityConfig.csStartup.Auth.cs 文件。打开Controller folder 并删除AccountController.csManageController.cs。在Models folder 中删除所有模型并在View Folder 中删除Account FolderManage folder

重新启动 Visual Studio,然后运行项目。如果您收到此错误:

尝试加载应用时出现以下错误。 - 未找到包含 OwinStartupAttribute 的程序集。 - 未找到包含 Startup 或 [AssemblyName].Startup 类的程序集。要禁用 OWIN 启动发现,请添加 appSetting owin:AutomaticAppStartup 在 web.config 中的值为“false”。 要指定 OWIN 启动程序集、类或方法,请添加 appSetting owin:AppStartup 具有完全限定的启动类或 web.config 中的配置方法名称。 你有两种方法来解决它:

  1. 打开bin folder,如果有Owin assembly,全部删除
  2. 或者在&lt;appSettings&gt; 部分打开web.config 然后添加这个&lt;add key="owin:AutomaticAppStartup" value="false" /&gt;

【讨论】:

  • 啊,我想我错过了最后一步,添加了owin:AutomaticAppStartup。我会试一试并报告。
  • 很棒的答案!
【解决方案2】:

默认的 mvc5 模板使用 Identity 作为成员系统。身份取决于 Owin,因此这就是它包含在项目中的原因(以及其他几个“可选”包)。如果您创建一个新的空项目并手动安装包 Microsoft.Aspnet.Mvc(使用命令 Install-Package Microsoft.Aspnet.Mvc),您可以看到不依赖于 Owin。

Obs:您还可以创建一个空项目并选中“为 MVC 添加文件夹和核心引用”选项。

【讨论】:

    【解决方案3】:

    OWIN 只是一个标准,它将 ASP.net 应用程序与 IIS 分离,因此应用程序可以自托管,还有其他好处,但这并不意味着您不能在 IIS 中托管它们。

    【讨论】:

    • 我知道,但我不想要所有带来的依赖,因此我的问题(这没有回答)。
    • @Andy 您要删除哪些依赖项。 vNext 的部分要点是该框架是通过 nuget 引入的。您是否要删除 asp.net? hanselman.com/blog/IntroducingASPNETVNext.aspx
    • @Aron 不,我不是要删除 Asp.Net,只是 Owin。
    • 说“owin 只是一个标准”是在忽略大量建立在标准之上的扩展方法,您需要使用这些方法来进行配置。
    【解决方案4】:

    我只是指定了完整的路线,它对我有用!!

    Project name: Users.Web
    Folders: App_Start
    Class name: IdentityConfig
    
    <add key="owin:AppStartup" value="Users.Web.App_Start.IdentityConfig" />
    

    【讨论】:

      猜你喜欢
      • 2023-03-23
      • 2015-06-09
      • 2014-01-02
      • 2017-10-31
      • 2015-02-12
      • 2016-04-26
      • 2014-03-06
      • 1970-01-01
      • 2016-09-10
      相关资源
      最近更新 更多