【问题标题】:What do I do when ASP.NET 5 (vNext) can't redirect bindings?当 ASP.NET 5 (vNext) 无法重定向绑定时我该怎么办?
【发布时间】:2015-08-23 14:28:45
【问题描述】:

我刚接触 MVC 6。我安装了 VS 2015 并使用默认的 ASP.NET 5 preview MVC Web Application 模板在本地 IIS 下一切正常。

然后我尝试在 these instructions 之后使用 StructureMap 切换默认 DI 容器(注意这是最近的一篇文章)。唯一的事情是我必须弄清楚要导入自己的命名空间(因为作者忽略了包含它们),这就是我包含的内容。

我将StructureMapRegistration 类和所有相关类放在一个文件中,这里是用法。

using Microsoft.Framework.DependencyInjection;
using StructureMap;
using StructureMap.Configuration.DSL.Expressions;

我在Startup.cs 文件中添加了以下用法。

using StructureMap;
using StructureMap.Graph;
using System.Reflection;

我对@9​​87654331@ 文件进行了以下编辑。

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
    // Add Entity Framework services to the services container.
    services.AddEntityFramework()
        .AddSqlServer()
        .AddDbContext<ApplicationDbContext>(options =>
            options.UseSqlServer(Configuration["Data:DefaultConnection:ConnectionString"]));

    // Add Identity services to the services container.
    services.AddIdentity<ApplicationUser, IdentityRole>()
        .AddEntityFrameworkStores<ApplicationDbContext>()
        .AddDefaultTokenProviders();

    // Configure the options for the authentication middleware.
    // You can add options for Google, Twitter and other middleware as shown below.
    // For more information see http://go.microsoft.com/fwlink/?LinkID=532715
    services.Configure<FacebookAuthenticationOptions>(options =>
    {
        options.AppId = Configuration["Authentication:Facebook:AppId"];
        options.AppSecret = Configuration["Authentication:Facebook:AppSecret"];
    });

    services.Configure<MicrosoftAccountAuthenticationOptions>(options =>
    {
        options.ClientId = Configuration["Authentication:MicrosoftAccount:ClientId"];
        options.ClientSecret = Configuration["Authentication:MicrosoftAccount:ClientSecret"];
    });

    // Add MVC services to the services container.
    services.AddMvc();

    //// Uncomment the following line to add Web API services which makes it easier to port Web API 2 controllers.
    //// You will also need to add the Microsoft.AspNet.Mvc.WebApiCompatShim package to the 'dependencies' section of project.json.
    //// services.AddWebApiConventions();

    //// Register application services.
    //services.AddTransient<IEmailSender, AuthMessageSender>();
    //services.AddTransient<ISmsSender, AuthMessageSender>();

    var container = new Container();
    container.Configure(x =>
    {
        x.Scan(scanning =>
        {
            scanning.Assembly(Assembly.GetExecutingAssembly());
            scanning.TheCallingAssembly();
            scanning.WithDefaultConventions();
        });

        //x.AddRegistry<WebsiteRegistry>();
    });

    // Our framework extension point
    container.Populate(services);
}

从字面上看,我从默认模板更改的唯一是上述代码更改和安装StructureMap 3.1.6.186。

using 语句抑制了所有设计时编译错误,但是当我构建时,我得到了其他几个错误。

错误 CS0012 类型“Action”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 32

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 32

错误 CS0012 类型“Func”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 59

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 59

错误 CS0012 类型“Type”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 63

错误 CS0012 类型“Expression”在未引用的程序集中定义。您必须添加对程序集“System.Core,Version=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e,Retargetable=Yes”的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 63

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 63

错误 CS0012 类型“Type”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 67

错误 CS0012 类型“Expression”在未引用的程序集中定义。您必须添加对程序集“System.Core,Version=2.0.5.0,Culture=neutral,PublicKeyToken=7cec85d7bea7798e,Retargetable=Yes”的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 67

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 67

错误 CS0012 类型“Type”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 89

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 89

错误 CS0411 无法从用法推断方法“IContainer.GetInstance(string)”的类型参数。尝试明确指定类型参数。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 89

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 107

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 107

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 120

错误 CS1061“IContainer”不包含“Dispose”的定义,并且找不到接受“IContainer”类型的第一个参数的扩展方法“Dispose”(您是否缺少 using 指令或程序集引用?)TestDI3 .DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Services\StructureMapRegistration.cs 120

错误 CS0012 类型“Action”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Startup.cs 94

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Startup.cs 94

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Startup.cs 107

错误 CS0012 类型“IDisposable”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Startup.cs 107

错误 CS0012 类型“对象”在未引用的程序集中定义。您必须添加对程序集 'mscorlib, Version=2.0.5.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e, Retargetable=Yes'的引用。 TestDI3.DNX Core 5.0 f:\Users\Shad\documents\visual studio 2015\Projects\TestDI3\src\TestDI3\Startup.cs 107

错误表明问题出在哪里 - 我需要参考 mscorlib 2.0.5.0。但是我已经在项目中引用了 mscorlib 4.0.0.0。

此时在 ASP.NET <bindingRedirect> 部分。但是,在 ASP.NET 5 中搜索如何执行此操作后,我遇到了this answer,这表明绑定重定向应该是“完全自动的”。

这是一个错误,还是我的配置中的某个步骤我错过了导致此错误?

配置

DNX 1.0.0-beta5

.NET 框架

x86

IIS Express

project.json

{
    "webroot": "wwwroot",
    "userSecretsId": "aspnet5-TestDI3-1665343b-5aa5-4d08-8596-a1a536223a19",
    "version": "1.0.0-*",

    "dependencies": {
        "EntityFramework.SqlServer": "7.0.0-beta5",
        "EntityFramework.Commands": "7.0.0-beta5",
        "Microsoft.AspNet.Mvc": "6.0.0-beta5",
        "Microsoft.AspNet.Mvc.TagHelpers": "6.0.0-beta5",
        "Microsoft.AspNet.Authentication.Cookies": "1.0.0-beta5",
        "Microsoft.AspNet.Authentication.Facebook": "1.0.0-beta5",
        "Microsoft.AspNet.Authentication.Google": "1.0.0-beta5",
        "Microsoft.AspNet.Authentication.MicrosoftAccount": "1.0.0-beta5",
        "Microsoft.AspNet.Authentication.Twitter": "1.0.0-beta5",
        "Microsoft.AspNet.Diagnostics": "1.0.0-beta5",
        "Microsoft.AspNet.Diagnostics.Entity": "7.0.0-beta5",
        "Microsoft.AspNet.Identity.EntityFramework": "3.0.0-beta5",
        "Microsoft.AspNet.Server.IIS": "1.0.0-beta5",
        "Microsoft.AspNet.Server.WebListener": "1.0.0-beta5",
        "Microsoft.AspNet.StaticFiles": "1.0.0-beta5",
        "Microsoft.AspNet.Tooling.Razor": "1.0.0-beta5",
        "Microsoft.Framework.Configuration.Abstractions": "1.0.0-beta5",
        "Microsoft.Framework.Configuration.Json": "1.0.0-beta5",
        "Microsoft.Framework.Configuration.UserSecrets": "1.0.0-beta5",
        "Microsoft.Framework.Logging": "1.0.0-beta5",
        "Microsoft.Framework.Logging.Console": "1.0.0-beta5",
        "Microsoft.VisualStudio.Web.BrowserLink.Loader": "14.0.0-beta5",
        "structuremap": "3.1.6.186"
    },

    "commands": {
        "web": "Microsoft.AspNet.Hosting --config hosting.ini",
        "ef": "EntityFramework.Commands"
    },

    "frameworks": {
        "dnx451": { },
        "dnxcore50": { }
    },

    "exclude": [
        "wwwroot",
        "node_modules",
        "bower_components"
    ],
    "publishExclude": [
        "node_modules",
        "bower_components",
        "**.xproj",
        "**.user",
        "**.vspscc"
    ],
    "scripts": {
        "prepublish": [ "npm install", "bower install", "gulp clean", "gulp min" ]
    }
}

【问题讨论】:

  • 你的 project.json 是什么样的?这是在 IIS Express 还是 IIS 中发生的?
  • @opants - 添加到我的答案中。除了上述代码更改和添加 StructureMap 3.1.6.186 作为依赖项外,我没有更改默认模板。该项目甚至没有编译,所以我很确定这与 IIS Express 无关。
  • 对 StructureMap 本身没有经验,但可能是它还不支持 .NET Core?即使是早期采用 DI 容器仍处于早期阶段。无论如何,请尝试在projects.json 中删除frameworks 中的dnxcore50,看看它是否可以编译,或者尝试this nuget package,或者两者都尝试。

标签: asp.net-mvc structuremap asp.net-core asp.net-core-mvc structuremap3


【解决方案1】:

感谢 opants,问题似乎与项目中包含 dnxcore50 框架有关。

"frameworks": {
    "dnx451": { },
    "dnxcore50": { }
}

删除它解决了这个问题。

"frameworks": {
    "dnx451": { }
}

【讨论】:

  • 根据您的要求,您可能希望将其保留在其中。你试过nuget package吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-09-28
  • 1970-01-01
  • 1970-01-01
  • 2014-04-24
相关资源
最近更新 更多