摘要
.NET在诞生之初就宣称要解决“DLL地狱”的痛点,经过20多年的发展,除了目前有.NET Framework、.NET Standard和.NET三套框架之外,传统的ASP.NET Web应用程序经常碰到dll版本不一致的问题。通过web.config中设置绑定重定向可以解决问题。但是维护这个绑定重定向的配置,会给程序员带来麻烦。尤其有时候在本地Visual Studio中和Gitlab CI中发布web项目,同一个DLL版本号竟然不一致。所以我写了这个小工具。
这个小工具诞生的迫切性
我的ASP.NET Web程序引用了3个包,截图如下:
上图中3个包的版本很清晰,但是在本地调试的时候,每次都提示主版本不一致,停止检测:
非得web.config中配置如下,才能工作:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" culture="neutral" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.7.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" culture="neutral" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.2.7.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" culture="neutral" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="3.6.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
用Gitlab CI在服务器上自动发布后,web.config中配置如下,改回和包的版本号一致,才能工作:
<runtime>
<assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
<dependentAssembly>
<assemblyIdentity name="System.Web.Http" culture="neutral" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="5.3.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="System.Net.Http.Formatting" culture="neutral" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="6.0.0.0" />
</dependentAssembly>
<dependentAssembly>
<assemblyIdentity name="Microsoft.CodeDom.Providers.DotNetCompilerPlatform" culture="neutral" publicKeyToken="31bf3856ad364e35" />
<bindingRedirect oldVersion="0.0.0.0-65535.65535.65535.65535" newVersion="4.1.0.0" />
</dependentAssembly>
</assemblyBinding>
</runtime>
于是萌生了写这个小工具的念头。
效果图
在本地运行
上图中带了--project参数,指定了项目文件的精确路径。
上图中显示了自动去除重复的配置。
如果您的配置完全正确,提示如下:
在Visual Studio 2022的终端
这里是在当前目录直接运行。程序会在当前目录下搜索web.config或者App.config。
在Gitlab CI流水线中运行
不足之处是控制台里的输出没有颜色了。
上图还是在.gitlab-ci.yml里调用了PowerShell的脚本文件,脚本文件里面执行C#程序,才能得到文字输出。
如果直接在.gitlab-ci.yml里调用C#程序执行,连一个字的输出都看不到。
核心代码
即将开源在Gitee和Github。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~