You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用同一DLL两个版本时出现MSB3243警告及功能异常求助

同一DLL多版本加载异常问题处理

问题背景

因第三方库变更,需同时使用TallComponents.PDF.Rasterizer的两个版本(v4.0.39.0和v3.0.188.0)。手动编辑csproj添加双版本引用并设置别名TC4、TC3,代码中用extern alias调用,编译成功但出现MSB3243警告,运行时v4功能正常,v3报“Method not found”,模块面板显示仅加载v4版本。已配置app.config的codeBase指定路径,但问题未解决。

现有配置

csproj引用配置

<Reference Include="TallComponents.PDF.Rasterizer, Version=4.0.39.0, Culture=neutral, PublicKeyToken=76bf2dedaa68ccb5, processorArchitecture=MSIL">
  <HintPath>..\packages\TallComponents.PDFRasterizer4.4.0.39\lib\net46\TallComponents.PDF.Rasterizer.dll</HintPath>
  <Aliases>TC4</Aliases>
</Reference>
<Reference Include="TallComponents.PDF.Rasterizer, Version=3.0.188.0, Culture=neutral, PublicKeyToken=76bf2dedaa68ccb5, processorArchitecture=MSIL">
  <HintPath>bin\TC3\TallComponents.PDF.Rasterizer.dll</HintPath>
  <Aliases>TC3</Aliases>
</Reference>

app.config配置

<dependentAssembly>
  <assemblyIdentity name="TallComponents.PDF.Rasterizer" culture="neutral" publicKeyToken="76bf2dedaa68ccb5"/>
  <codeBase version="3.0.188.0" href="TC3\TallComponents.PDF.Rasterizer.dll" />
  <codeBase version="4.0.39.0" href="TallComponents.PDF.Rasterizer.dll" />
</dependentAssembly>      

MSB3243警告信息

C:\Program Files\Microsoft Visual Studio\2022\Community\MSBuild\Current\Bin\amd64\Microsoft.Common.CurrentVersion.targets(2401,5): warning MSB3243: 无法解析"TallComponents.PDF.Rasterizer, Version=4.0.39.0, Culture=neutral, PublicKeyToken=76bf2dedaa68ccb5"与"TallComponents.PDF.Rasterizer, Version=3.0.188.0, Culture=neutral, PublicKeyToken=76bf2dedaa68ccb5"之间的冲突。将任意选择"TallComponents.PDF.Rasterizer, Version=4.0.39.0, Culture=neutral, PublicKeyToken=76bf2dedaa68ccb5"。
5> 建议通过app.config将程序集"TallComponents.PDF.Rasterizer, Culture=neutral, PublicKeyToken=76bf2dedaa68ccb5"从版本"3.0.188.0" [C:\Dev\DelftRed\PL-1520_SlowFloorPlan\Plandroid\bin\TC3\TallComponents.PDF.Rasterizer.dll]重定向到版本"4.0.39.0" [C:\Dev\DelftRed\PL-1520_SlowFloorPlan\packages\TallComponents.PDFRasterizer4.4.0.39\lib\net46\TallComponents.PDF.Rasterizer.dll]来解决冲突并消除警告。

解决思路

  • 修正app.config的codeBase路径:确保href路径是相对于输出目录的正确路径,或直接使用绝对路径测试,避免路径解析错误:
    <codeBase version="3.0.188.0" href="file:///C:/Dev/DelftRed/PL-1520_SlowFloorPlan/Plandroid/bin/TC3/TallComponents.PDF.Rasterizer.dll" />
    
  • 禁用自动程序集重定向:在csproj中添加配置,防止MSBuild自动生成重定向覆盖手动设置:
    <PropertyGroup>
      <AutoGenerateBindingRedirects>false</AutoGenerateBindingRedirects>
      <GenerateBindingRedirectsOutputType>false</GenerateBindingRedirectsOutputType>
    </PropertyGroup>
    
  • 检查CopyLocal属性:确保两个版本的引用都设置CopyLocal=true,保证编译时DLL复制到对应输出路径,可手动在csproj的Reference节点添加:
    <Private>True</Private>
    
  • 验证别名使用正确性:代码文件顶部必须声明extern alias,并通过别名访问对应版本的类型,例如:
    extern alias TC3;
    extern alias TC4;
    
    var v3Instance = new TC3::TallComponents.PDF.Rasterizer.SomeClass();
    var v4Instance = new TC4::TallComponents.PDF.Rasterizer.SomeClass();
    
  • 启用程序集加载日志:运行fuslogvw.exe(Fusion日志查看器),配置记录所有绑定失败,查看v3版本加载时的具体错误(如路径找不到、版本不匹配)。
  • 分离输出路径:确保两个版本的DLL编译后存放在独立子目录,避免被互相覆盖,同时在app.config中明确对应路径。

内容的提问来源于stack exchange,提问作者Nick Betts

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 10:46:00