gpt4 book ai didi

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

转载 作者:太空狗 更新时间:2023-10-29 20:38:21 25 4
gpt4 key购买 nike

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

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

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

}
}

上面重要的部分是ApplyapiDescription参数。

正常构建项目时,上面编译运行正常。但是,当我使用 assembly.GetTypes() 反射(reflect)正在运行的程序集时,

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.

this question引用了上述异常,但所提出的解决方案似乎都不起作用。我试图通过向 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>

然而,这似乎并没有做任何事情。

如何让这种类型正确加载?

编辑:我创建了 a minimal reproduction of the issue . BuildTask.targets 中的构建任务加载项目程序集,然后尝试加载所有类型。抛出并显示错误。

最佳答案

跟进我的评论...

我刚刚测试了示例项目,这个问题可以通过使用 Swagger-Net 来解决。 .

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

关于引用旧版本 nuget 依赖项的 C# 库导致程序集反射失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46924935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com