我们从第三方获取了一个程序集,例如
Example.dll
。最近这个供应商引入了一些破坏性的更改,但没有改变程序集的名称。我能否将新的程序集重命名为例如 Example2.dll
并使用反射动态加载它?它没有强名称。Example.dll
。最近这个供应商引入了一些破坏性的更改,但没有改变程序集的名称。我能否将新的程序集重命名为例如 Example2.dll
并使用反射动态加载它?它没有强名称。 <dependentAssembly>
<assemblyIdentity name="AutoMapper" publicKeyToken="be96cd2c38ef1005" culture="neutral" />
<codeBase version="6.1.1.0" href="dlls\AutoMapper.dll" />
</dependentAssembly>
我只需要记得在第三方dll更改时手动更新dll文件夹(我们从Nuget获取它)。
是的,你可以通过调用Assembly.LoadFile
或Assembly.LoadFrom
或类似的方法来按名称加载任何程序集。 推荐使用LoadFrom
方法,因为它将程序集加载到默认加载上下文中,并且还会加载依赖的程序集。但请记住,实际的 AssemblyName 并不会因为文件重命名而改变。尽管有一些工具可以替你更改程序集名称。
Ildasm
和 Ilasm
有用。你可以重命名程序集并构建新的,但请检查是否违反了任何许可证。 - Sriram Sakthivel
Assembly
对象正确解析这些类型。不过,这段代码很快就会变得非常笨重。 - drew_w