我有一个奇怪的情况,我的webdeploy发布进程从我的packages目录中检测到比解决方案代码中使用的更新版本的第三方nuget dll,并包含在zip包中的那个。由于dll版本与项目引用中定义的预期版本不匹配,因此在部署到QA服务器时失败。
我从主分支创建了一个修补程序分支,用于在本地编译和工作的项目,但是当我将其发布到webdeploy zip文件并提供给我们的ops团队时,质量保证服务器,我们臭名昭着:
Could not load file or assembly 'SimpleInjector.Integration.WebApi, Version=4.0.7.0, Culture=neutral, PublicKeyToken=984cb50dea722e99' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference
调查表明,SimpleInjector dll版本 4.0.8 正在包中,即使它在我的解决方案中没有被引用(看看NuGet包管理器显示该解决方案没有引用4.0.8),我不知道为什么或如何发生这种情况?
我的修补程序分支webconfig包含一个自动添加的版本重定向,如:
<dependentAssembly>
<assemblyIdentity name="SimpleInjector" publicKeyToken="984cb50dea722e99" culture="neutral" />
<bindingRedirect oldVersion="0.0.0.0-4.0.7.0" newVersion="4.0.7.0" />
</dependentAssembly>
有趣的是,在一个更新的功能分支中,我已经更新了解决方案中的几个库,SimpleInjector就是其中之一,所以看起来在webdeploy发布期间,Visual Studio正在捆绑最新版本的它可以在我的 / packages 目录中找到的dll,并忽略v4.0.8从未在修补程序分支代码中实际使用的事实。
有谁能告诉我这是怎么可能的,以及我将来如何避免这种情况?我很想尝试禁用自动版本重定向,但没有使用该功能的经验,因此不确定可能产生的连锁效应。