我想使用相同的库,但使用相同程序的不同版本。我遵循了这个问题中的解释,但在我的情况下,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# 语言,所以我非常感谢任何帮助:)