程序集绑定重定向不起作用

我正在尝试使用以下app.config设置程序集绑定重定向:

          

我在GAC中使用版本9.0.242.0的计算机上运行该程序,并使用指定的公钥令牌。 CLR似乎甚至没有尝试重定向绑定以使用该版本。

这是我在fuslogvw.exe中得到的:

LOG: This bind starts in default load context. LOG: Using application configuration file: \Debug\AssemblyRedirectPOC.exe.Config LOG: Using machine configuration file from C:\Windows\Microsoft.NET\Framework\v2.0.50727\config\machine.config. LOG: Post-policy reference: Microsoft.AnalysisServices, Version=10.0.0.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 LOG: GAC Lookup was unsuccessful. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices.DLL. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices/Microsoft.AnalysisServices.DLL. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices.EXE. LOG: Attempting download of new URL /Debug/Microsoft.AnalysisServices/Microsoft.AnalysisServices.EXE. LOG: All probing URLs attempted and failed.

当我尝试将9.0.242.0版本的dll放在探测路径中时,我得到了这个:

LOG: Assembly download was successful. Attempting setup of file: \Debug\Microsoft.AnalysisServices.dll LOG: Entering run-from-source setup phase. LOG: Assembly Name is: Microsoft.AnalysisServices, Version=9.0.242.0, Culture=neutral, PublicKeyToken=89845dcd8080cc91 WRN: Comparing the assembly name resulted in the mismatch: Major Version ERR: The assembly reference did not match the assembly definition found. ERR: Failed to complete setup of assembly (hr = 0x80131040). Probing terminated.

请注意,我也尝试将重定向更改为在app.config中使用“9.0.242.0”而不是“9.0.0.0”,但这不起作用,尽管我认为它不应该有任何区别。

根据我的理解,重定向绑定的重点是使用与程序构建的版本不匹配的版本。 我在这里完全遗漏了什么吗? 我正在尝试做什么,如果是这样,任何想法为什么它不起作用?

干杯,亚当

配置xml中的任何拼写错误都可能是原因。 Loader只是看不到你的配置。 我还有一个小时的头痛,直到我意识到错误是在模式名称中的字符“=”而不是“ – ”:

  

只需仔细检查所有属性名称和值。 我猜“PublicKeyToken”应该是“publicKeyToken”

这应该工作:

           

我遇到绑定重定向,因为在assemblyBinding元素上缺少命名空间。

正确

      

不正确

注意缺少:xmlns =“urn:schemas-microsoft-com:asm.v1”

      

确保标记没有名称空间属性 。 否则,将忽略任何标记。

错误:

  

对:

  

(来自https://stackoverflow.com/a/12011221/150370 )

在我的情况下,我不得不删除

 appliesTo="v2.0.05727" 

  

当我将绑定重定向配置移动到machine.config文件时,我的问题得以解决。

我有类似的问题,将bindingredirects移动到Machine.Config是唯一有效的方法。 这在我的winform应用程序中不是理想的解决方案,因为我将我的应用程序分发给客户

解:

确保.config文件位于运行应用程序的目录中。 例如,如果您的AppName是“MyApp”,则重定向应该位于应用程序目录中的“MyApp.exe.Config”文件中。

即使在我的解决方案中使用第三方dll的代码在不同的dll中并添加.dll.config也没有帮助,我必须这样做。

偏心密码策略也可能导致配置中的assemblyBinding项被忽略。 配置文件中显然不允许使用“&”和“^”等字符。 Notepad ++中的XML工具在使用Assembly Binding Log Viewer几个小时后向我展示了这一点。

如果它对任何人有任何帮助,我遇到了这个,因为我没有把完整版本放入newVersion。 即,我有newVersion="3.0.1"而不是newVersion="3.0.1.0"

检查错误xxx上的显式绑定重定向,Culture = neutral,PublicKeyToken = xxx“与自动生成的绑定重定向冲突

出现在输出窗口中(它不会出现在错误窗口中)

非常感谢你的答案,尤其是来自Shrike的答案。 我有一个应用程序在开发中工作,但在部署版本中没有。 当我仔细观察时,我在生产中有这个,它与开发不匹配:

          

dependentAssembly xmlns =“”是罪魁祸首。 一旦我将我的答案与你的答案进行比较,并解决了这个问题,它就可以了。 谢谢您的帮助

如果在没有ASP.NET开发工具的情况下安装Visual Studio 2017,它仍将加载Web项目并编译和构建它。 它只会发出有关NuGet包版本的警告,因为它不知道如何处理web.config文件,因此无法看到绑定重定向。

修复安装修复了我的问题,但它花了很长时间才弄明白。