尝试使用同一 DLL 的两个不同版本时出现警告 MSB3243

问题描述 投票:0回答:1

由于第 3 方库的更改,我尝试使用同一 DLL 的两个不同版本。有很多参考文献可以做到这一点,例如this,但它们针对稍微不同的问题描述了稍微不同的解决方案,并且似乎没有一个存在我遇到的问题。

我遇到的第一个问题是,在 Visual Studio 2022 中添加对 DLL 第二版本的引用不起作用,失败并出现错误(“无法添加对组件的引用。对组件‘TallComponents.PDF’的引用.Rasterizer' 已存在于项目中”)。因此,我直接编辑了 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>

然后修改代码以使用

extern alias
来使用两个版本的库的不同功能。构建成功,但出现 MSB3243 警告。

C:\Program Files\Microsoft Visual Studio�2\Community\MSBuild\Current\Bin md64\Microsoft.Common.CurrentVersion.targets(2401,5):警告 MSB3243:无法解决“TallComponents.PDF.光栅化器,版本=4.0.39.0,文化=中性,PublicKeyToken=76bf2dedaa68ccb5”和“TallComponents.PDF.Rasterizer,版本=3.0.188.0,文化=中性,PublicKeyToken=76bf2dedaa68ccb5”。任意选择“TallComponents.PDF.Rasterizer,Version=4.0.39.0,Culture=neutral,PublicKeyToken=76bf2dedaa68ccb5”。 5> 考虑从版本“3.0.188.0”[C:\Dev\DelftRed\PL-1520_SlowFloorPlan\Plandroid in\TC3\TallComponents 中重新映射程序集“TallComponents.PDF.Rasterizer, Culture=neutral, PublicKeyToken=76bf2dedaa68ccb5” .PDF.Rasterizer.dll] 到版本“4.0.39.0”[C:\Dev\DelftRed\PL-1520_SlowFloorPlan\packages\TallComponents.PDFRasterizer4.4.0.39\lib et46\TallComponents.PDF.Rasterizer.dll] 解决冲突并消除警告。

应用程序运行并且基于库版本 4 的功能正常运行。库版本 3 功能因“找不到方法”错误而失败。 Visual Studio 中的“模块”面板显示仅加载了 dll 的版本 4。

为了使同一 DLL 的 2 个版本正常工作,显然还需要执行其他步骤。特别是,我按如下方式修改了 app.config,并确保执行时 DLL 位于正确的位置。

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

我正在寻找任何线索来帮助完成这项工作。

c# msbuild
1个回答
0
投票

您可以尝试创建一个将引用您的问题库的新项目,并创建与问题库中相同的结构、相同的方法和属性(除了命名空间)。在它们内部只需调用问题库中的方法即可。例如

namespace LibraryV3
{
    public class LibraryClass
    {
        private readonly ProblemLibrary.ExampleClass _exampleClass;

        public ExampleClass()
        {
            _exampleClass = new ProblemLibrary.ExampleClass();
        }

        public void ExampleMethod()
        {
            _exampleClass.ExampleMethod();
        }
    }
}

我认为它会起作用。

© www.soinside.com 2019 - 2024. All rights reserved.