代码改变世界

天行健,君子以自强不息

  博客园 :: 首页 :: 博问 :: 闪存 :: 新随笔 :: 联系 :: 订阅 订阅 :: 管理 ::

摘要

.NET在诞生之初就宣称要解决“DLL地狱”的痛点,经过20多年的发展,除了目前有.NET Framework、.NET Standard和.NET三套框架之外,传统的ASP.NET Web应用程序经常碰到dll版本不一致的问题。通过web.config中设置绑定重定向可以解决问题。但是维护这个绑定重定向的配置,会给程序员带来麻烦。尤其有时候在本地Visual Studio中和Gitlab CI中发布web项目,同一个DLL版本号竟然不一致。所以我写了这个小工具。

这个小工具诞生的迫切性

我的ASP.NET Web程序引用了3个包,截图如下:

img

上图中3个包的版本很清晰,但是在本地调试的时候,每次都提示主版本不一致,停止检测:

img

非得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>

于是萌生了写这个小工具的念头。

效果图

在本地运行

img

上图中带了--project参数,指定了项目文件的精确路径。

img

上图中显示了自动去除重复的配置。

如果您的配置完全正确,提示如下:

img

在Visual Studio 2022的终端

img

这里是在当前目录直接运行。程序会在当前目录下搜索web.config或者App.config。

在Gitlab CI流水线中运行

img

不足之处是控制台里的输出没有颜色了。

上图还是在.gitlab-ci.yml里调用了PowerShell的脚本文件,脚本文件里面执行C#程序,才能得到文字输出。

如果直接在.gitlab-ci.yml里调用C#程序执行,连一个字的输出都看不到。

核心代码

即将开源在Gitee和Github。

posted on 2024-05-28 00:33  终南山人  阅读(33)  评论(0编辑  收藏  举报