相同dll的引用问题

1、最近项目中出现了DXF分割的不同引用,一个普通的分割,一个异形分割,但是都是不同版本的dll,却有着同一个命名空间,我在引用时候使用的地址不一样,但是输出地址都是一样的,导致其中一个分割解析出错。
2、解决方案
2-1、使用

<Aliases></Aliases>

为两个dll起个别名,并且重命名输出目录

<!-- 在类库项目 ClassLib.csproj 中 -->
<ItemGroup>
  <Reference Include="MyNamespace.V1">
    <HintPath>..\Libs\Version1\MyNamespace.dll</HintPath>
    <Aliases>V1</Aliases>
    <!-- 关键修改:重命名输出文件 -->
    <Link>%(FileName).V1%(Extension)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Reference>
</ItemGroup>

<!-- 在主程序项目 App.csproj 中 -->
<ItemGroup>
  <Reference Include="MyNamespace.V2">
    <HintPath>..\Libs\Version2\MyNamespace.dll</HintPath>
    <Aliases>V2</Aliases>
    <!-- 重命名输出文件 -->
    <Link>%(FileName).V2%(Extension)</Link>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
  </Reference>
</ItemGroup>

2-2、
隔离到子目录

<!-- 在所有项目中统一配置 -->
<ItemGroup>
  <Reference Include="MyNamespace">
    <HintPath>..\Libs\Version1\MyNamespace.dll</HintPath>
    <Aliases>V1</Aliases>
    <!-- 复制到子目录 -->
    <Private>True</Private>
    <CopyToOutputDirectory>PreserveNewest</CopyToOutputDirectory>
    <DestinationSubDirectory>Version1\</DestinationSubDirectory>
  </Reference>
</ItemGroup>

2-3、在运行时动态绑定

// 在程序启动时注册解析器
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => 
{
    var assemblyName = new AssemblyName(args.Name);
    
    // 根据命名空间决定加载路径
    if (assemblyName.Name == "MyNamespace")
    {
        string path = Path.Combine(
            AppDomain.CurrentDomain.BaseDirectory,
            "Version1",  // 或 Version2
            "MyNamespace.dll"
        );
        return Assembly.LoadFrom(path);
    }
    return null;
};

2-4、
在App.config精确版本

<configuration>
  <runtime>
    <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
      <dependentAssembly>
        <assemblyIdentity name="MyNamespace" publicKeyToken="..." />
        <!-- 强制加载 Version1 -->
        <codeBase version="1.0.0.0" href="Version1/MyNamespace.dll"/>
        <!-- Version2 的绑定 -->
        <codeBase version="2.0.0.0" href="Version2/MyNamespace.dll"/>
      </dependentAssembly>
    </assemblyBinding>
  </runtime>
</configuration>
posted @ 2025-04-09 23:25  孤沉  阅读(16)  评论(0)    收藏  举报