0

我想使用相同的库,但使用相同程序的不同版本。我遵循了这个问题中的解释,但在我的情况下,PublicKeyToken 是相同的:

是否可以将同一程序集的不同版本引用到单个项目中?

我正在使用库 Siemens.Ingenieering.dll。我想使用版本 15 和版本 16。我已经为这两个库创建了 extern 别名:

extern alias Siemens_Engineering_15;

extern alias Siemens_Engineering_16;

我用别名引用每个对象,例如:

public Siemens_Engineering_15::Siemens.Engineering.TiaPortal MyTiaPortal15
        {
            get; set;
        }
        public Siemens_Engineering_15::Siemens.Engineering.Project MyProject15
        {
            get; set;
        }

这段代码起初没有显示任何错误。但是当我执行它时,它只适用于第一个库(V15)中的对象,它不适用于另一个库(V16)。以下错误显示:

System.TypeLoadException:“无法加载程序集“Siemens.Engineering.Contract,Version=1500.0.2601.1,Culture=neutral,PublicKeyToken=37a18b206f7724a6”中的类型“Siemens.Engineering.Loader.IAppSupport”。”

这是我的 App.config:

<?xml version="1.0"?>
<configuration>
    <startup> 
        <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.6.1"/>
    </startup>
    <runtime>
        <assemblyBinding xmlns="urn:schemas-microsoft-com:asm.v1">
            <dependentAssembly>
                <assemblyIdentity name="Siemens.Engineering" culture ="neutral" publicKeyToken="d29ec89bac048f84" />
                <codeBase version="15.0.0.0" href="Lib/Siemens.Engineering.15.dll"/>
            </dependentAssembly>
            <dependentAssembly>
                <assemblyIdentity name="Siemens.Engineering" culture ="neutral" publicKeyToken="d29ec89bac048f84" />
                <codeBase version="16.0.0.0" href="Lib/Siemens.Engineering.16.dll"/>
            </dependentAssembly>
        </assemblyBinding>
    </runtime>
</configuration>

此警告还显示:

严重性代码描述项目文件行抑制状态警告“Siemens.Engineering, Version=16.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84”和“Siemens.Engineering, Version=15.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84”之间的冲突"无法解决。随机选择“Siemens.Engineering, Version=16.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84”。

我已经尝试创建一个新类来使用每个库。

我认为程序失败是因为相同的令牌,所以它只读取其中一个。但我不知道如何解决它。

我最近开始使用 c# 语言,所以我非常感谢任何帮助:)

4

0 回答 0