从外部dll

时间:2017-04-16 12:31:17

标签: c# asp.net .net

我有一个包含2个项目的C#解决方案:

  1. library dll
  2. webapp(web api)
  3. 在第一个项目中,我扩展了ApiController类来定制一些行为,我的目标是在创建其他项目时使用该dll,只需添加对它的引用即可提高生产力。 我所做的代码就是:

        public class CustomController : ApiController
        {
            //add some properties and private/protected helping methods
    
            public override Task<HttpResponseMessage> ExecuteAsync(HttpControllerContext controllerContext, CancellationToken cancellationToken)
            {
                 //customize some initialization before processing request.
            }
        }
    

    第二个项目是一个虚拟项目,用于测试第一个项目是否有效,我为第一个项目(dll库)添加了一个引用

    public class EmptyController : CustomController 
    {
        [HttpGet]
        public string Home()
        {
            return "whatever.";
        }
    }
    

    配置文件:

            config.MapHttpAttributeRoutes();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { action = "get", id = RouteParameter.Optional }
            );
    

    现在,当我运行第二个项目时,它会启动,但是当我尝试访问控制器(/ api / Empty / Home)时,我收到一条消息

      

    “找不到与控制器名称匹配的类型”

    我尝试将CustomController类从第一个项目复制到web项目,它运行得很好。但当我将它移回dll项目时,再次遇到同样的错误。

    我已经尝试在配置文件中更改IAssembliesResolver服务,问题是dll已经加载了,不知道为什么它没有看到控制器。 有什么想法可能会出错吗?

1 个答案:

答案 0 :(得分:0)

由于dll和webapp项目中的软件包版本不同,问题似乎发生了,因为模板,webapp使用的是旧版本,而dll则下载了最新版本。更新两个项目以使用相同的版本后,它可以正常工作。