![](/img/trans.png)
[英]Loading an .NET Standard assembly which references a nuget dependency at runtime?
[英]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)
{
}
}
上面的重要部分是Apply
的apiDescription
參數。
正常構建項目時,上面編譯並運行正常。 但是,當我使用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.