引用较旧版本的nuget依赖项的C#库导致程序集反射失败

丹尼尔

我项目中的一个nuget依赖项(Swashbuckle)要求该System.Web.Http的版本(4.0.0.0)比该项目其余部分(5.2.3.0)所需的版本要旧。

Swashbuckle要求我编写一个实现特定接口的类:

public class OperationFilter : Swashbuckle.Swagger.IOperationFilter
{
    public void Apply(Swashbuckle.Swagger.Operation operation, Swashbuckle.Swagger.SchemaRegistry schemaRegistry, System.Web.Http.Description.ApiDescription apiDescription)
    {

    }
}

上面的重要部分是的apiDescription参数Apply

在正常构建项目时,以上代码可以编译并正常运行。但是,当我使用来回顾正在运行的程序集时assembly.GetTypes()

var asm = System.Reflection.Assembly.GetExecutingAssembly();
var types = asm.GetTypes()

一个ReflectionTypeLoadException被抛出,有以下装载机异常详细信息:

Method 'Apply' in type 'OperationFilter' from assembly 'MyAssembly, 
Version=1.0.0.0, Culture=neutral, PublicKeyToken=null' does not have an 
implementation.

这个问题引用了上面的例外,但是提出的解决方案似乎都不起作用。我试图通过向Web.config添加bindingRedirect来解决此问题:

        <dependentAssembly>
            <assemblyIdentity name="System.Web.Http" publicKeyToken="31bf3856ad364e35" culture="neutral" />
            <bindingRedirect oldVersion="0.0.0.0-5.2.3.0" newVersion="5.2.3.0" />
        </dependentAssembly>

但是,这似乎没有任何作用。

如何才能正确加载此类型?

编辑:我已经创建了该问题的最小复制生成任务BuildTask.targets将加载项目程序集,然后尝试加载所有类型。引发并显示错误。

清除棕褐色

跟进我的评论...

我刚刚测试了示例项目,可以使用Swagger-Net修复此问题

那是我的Swashbuckle的分支,我已经将所有依赖项升级到最新版本,并且还使用了最新的Swagger-UI(3.x),与旧版本相比有了很大的变化,请让我知道您的喜好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章