簡體   English   中英

引用較舊版本的nuget依賴項的C#庫會導致程序集反射失敗

[英]C# library which references older version of nuget dependency causes assembly reflection to fail

我的項目中的一個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)
    {

    }
}

上面的重要部分是ApplyapiDescription參數。

正常構建項目時,上面編譯並運行正常。 但是,當我使用assembly.GetTypes()反映正在運行的程序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),它與舊版本相比發生了巨大變化,讓我知道你喜歡它。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM