[英]c# Third party Reference Update Cause Issues
我想知道您是否会帮助您。
我有一个用c#编写的应用程序,它使用来自IBM(cwbx)的引用。
我最初使用v5调用了该函数;
var download = new DatabaseDownloadRequest
{
system = host,
UseCompression = true
};
download.AS400File.Name = tableNames;
tempFileName = Path.GetTempFileName();
fileDescriptionFile = Path.GetTempFileName();
download.PCFile.Name = tempFileName;
download.PCFile.FileType = delimiterType;
但是,IBM用他们的智慧将功能.PCFile更改为.pcFile,导致我的应用程序中断。
如果我公司中的所有用户都使用最新版本,这将不是问题,但是对此的吸收会很慢,因此我需要能够同时使用这两个版本。
是否可以在某种形式的函数中使用大写或小写形式使用我所需要使用的函数,以使它们相同,或者您能想到我可以采用的其他任何方式?
谢谢,
戴夫
我建议将这些调用包装到您创建的类中,该类使用反射访问它们。 我无法想象任何其他方法都会导致任何稳定的结果。
我认为在这里使用反射是最好的解决方案。
无论哪种版本的库都可以使用类似的方法:
PropertyInfo pcFileProperty = download.GetType().GetProperty("PCFile");
if (pcFileProperty == null)
{
pcFileProperty = download.GetType().GetProperty("pcFile");
}
if (pcFileProperty != null)
{
PCFileType file = (PCFileType)pcFileProperty.GetValue(download, null);
file.Name = tempFileName;
file.FileType = delimiterType;
}
else
{
// Property not found - IBM has changed the API again?
// Throw an exception?
}
这可能是一种回旋的方式,但是我已经尝试了一些虚拟类进行以下操作,并且似乎可行:
如果设置正确,则可以使您的核心项目完全不必引用IBM程序集,并且在您的应用程序启动时只能检查一次异常,然后使所有内容正常运行。
为了澄清,我有五个项目:
构建解决方案后,可以将“旧”或“新” DLL放到输出文件夹中,并且我的控制台应用程序将在下次运行时相应地做出响应。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.