我遇到的问题是我需要在同一个项目中使用 2 个第三方 DLL 作为参考。然而,这两个有相同的名字。我发现了几个关于类似问题的主题,但没有一个能解决我的问题。
我想要达到的目标:
西门子有一个名为“TIA-portal”的编程包,用于对 PLC(工业应用控制器)进行编程。Siemens 还提供了一个 DLL,您可以将其用作 .NET 项目中的参考,它允许您在自己的应用程序中使用 TIA-portal 的功能。此 DLL 通常用于为 TIA-portal 自动生成代码。
每隔几年,西门子就会发布一个新版本的 TIA 门户,最新的是版本 17。我希望我的应用程序同时适用于版本 16 和 17。所以我的计划是制作 2 个相同的用户控件。唯一的区别是它们引用了哪个 DLL。
我的问题:
两个版本的 DLL 具有相同的名称:“Siemens.Engineering”。
我试过的:
我从另一个线程中了解到,您可以通过使用别名属性在同一个项目中使用 2 个具有相同名称的引用。我为这两个参考文献提供了别名“TIAv16”和“TIAv17”。(我确实必须重命名 DLL 的文件名才能添加我的两个引用)
当我这样做后编译时,Visual Studio 没有给出任何错误。但是,在输出窗口中,我看到以下错误:
warning MSB3243: No way to resolve conflict between "Siemens.Engineering, Version=17.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84" and "Siemens.Engineering, Version=16.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84". Choosing "Siemens.Engineering, Version=17.0.0.0, Culture=neutral, PublicKeyToken=d29ec89bac048f84" arbitrarily.
当我查看输出文件夹时,我注意到 2 个 DLL 都不在其中。
我认为问题是由于两个参考具有相同的身份:“Siemens.Engineering”。
我的问题
所以,如果我正确理解我的问题,有两种可能的解决方案。
1:编辑DLL文件:
有没有办法以更改 Identity 属性的方式编辑 DLL?我尝试使用一个名为“Resource Hacker”的程序。但是,我找不到进行必要更改的方法。
2:改变程序结构:
有没有办法我可以重组我的解决方案以完全否定这个问题?
我之前尝试过的是在我的解决方案中为我的每个用户控件制作 2 个单独的项目。这些项目中的每一个都只有 1 个 DLL。
在我的主应用程序中,我会使用这两个项目作为参考,这样我就可以使用它们各自的用户控件。这样做的问题是,由于两个 DLL 具有相同的名称,因此只有一个 DLL 出现在输出文件夹中。
任何解决方案或建议将不胜感激。