程序集绑定重定向不起作用
我正在尝试使用以下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文件,因此无法看到绑定重定向。
修复安装修复了我的问题,但它花了很长时间才弄明白。