Nik*_*wal 102 c# assembly-binding-redirect
这不是一个问题问题,而是关于装配绑定重定向工作的一般性理解问题.
查询
只有主要版本发生变化时,旧版本和新版本才会更改吗?
<dependentAssembly>
<assemblyIdentity name="FooBar"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<bindingRedirect oldVersion="7.0.0.0" newVersion="8.0.0.0" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)Evk*_*Evk 126
为什么需要绑定重定向?假设您有引用库B的应用程序A,以及版本1.1.2.5的库C. 库B反过来也引用库C,但是引用版本1.1.1.0.现在我们遇到了冲突,因为您无法在运行时加载同一程序集的不同版本.要解决此冲突,您可以使用绑定重定向,通常使用新版本(但也可以使用旧版本).您可以通过将以下内容添加到应用程序A的app.config文件的下面configuration > runtime > assemblyBinding
部分(请参阅此处获取完整配置文件的示例):
<dependentAssembly>
<assemblyIdentity name="C"
publicKeyToken="32ab4ba45e0a69a1"
culture="en-us" />
<bindingRedirect oldVersion="1.1.1.0" newVersion="1.1.2.5" />
</dependentAssembly>
Run Code Online (Sandbox Code Playgroud)
您还可以指定要映射的版本范围:
<bindingRedirect oldVersion="0.0.0.0-1.1.1.0" newVersion="1.1.2.5" />
Run Code Online (Sandbox Code Playgroud)
现在,库B,参考版本1.1.1.0的C编译,将在运行时使用版本1.1.2.5的C. 当然,您最好确保库C向后兼容,否则可能会导致意外结果.
您可以重定向任何版本的库,而不仅仅是主要版本.
小智 32
我们遇到了NewtonSoft.Json的绑定重定向问题.我们在win 10文件属性"9.0.1.19813"中查找了文件版本,查找了数字并且重定向仍然失败.进一步调查,发现我们正在查看文件版本而不是汇编版本.所以,我想知道人们是否误解了文件版本(经常更改)和汇编版本(在Windows 10文件资源管理器中看不到).要查看dll的Assembly版本,可以在powershell中运行它.将dll名称替换为您要查找版本的名称.
[Reflection.AssemblyName]::GetAssemblyName('C:\development\bin\Newtonsoft.Json.dll').Version
Run Code Online (Sandbox Code Playgroud)
上面的结果是.
Major Minor Build Revision
----- ----- ----- --------
9 0 0 0
Run Code Online (Sandbox Code Playgroud)
参见参考文献:
我怎样才能在Windows Vista和更新版本中看到.NET程序集的汇编版本(WIndows 7,2008)?
https://support.microsoft.com/en-nz/help/556041
归档时间: |
|
查看次数: |
32046 次 |
最近记录: |