如何动态添加SAPBobsCOM类型库参考

2020-08-15 22:14发布

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

在用C#准备插件时,我经常在Visual Studio中手动添加SAPBobsCOM类型库参考。 现在,我想构建自己的插件,并使其使用SAPbobsCOM90.dll(对于运行SAP Business One版本9.x的用户)或SAPbobsCOM100.dll(对于运行SAp Business One版本10.x的用户)

请就如何动态添加此引用提供建议,以便我只能构建一个版本。

谢谢。

         点击此处--->   EasySAP.com群内免费提供SAP练习系统(在群公告中)

加入QQ群:457200227(SAP S4 HANA技术交流) 群内免费提供SAP练习系统(在群公告中)


你好

在用C#准备插件时,我经常在Visual Studio中手动添加SAPBobsCOM类型库参考。 现在,我想构建自己的插件,并使其使用SAPbobsCOM90.dll(对于运行SAP Business One版本9.x的用户)或SAPbobsCOM100.dll(对于运行SAp Business One版本10.x的用户)

请就如何动态添加此引用提供建议,以便我只能构建一个版本。

谢谢。

付费偷看设置
发送
2条回答
Climb_Ma
1楼-- · 2020-08-15 23:01

您解决了这个问题吗?
您可以检查CINF表以检查用户运行的版本,然后将适当的DLL复制到运行时。 在Visual Studio中,只有在将"嵌入"设置为false并将"复制本地"设置为True时,此方法才有效。

悠然的二货
2楼-- · 2020-08-15 22:56

你好库尔特,

我早在一段时间(8.82 vs 9.0的时候)就一直在研究这个问题。

那我的结论是,因为SAPbobsCOM.dll是一个非托管的COM对象,

一个人真的不想在编程时使用后期绑定。

只需查看下面的代码即可连接到SAP公司对象:

AppDomain.CurrentDomain.AssemblyResolve + =委托(对象发送者,ResolveEventArgs e)

{

System.Reflection.AssemblyName requiredName =新的System.Reflection.AssemblyName(e.Name);

string v_AssemblyPath;

如果(requestedName.Name ==" Interop.SAPbobsCOM,版本= 8.8.0.0,文化=中性,PublicKeyToken =空")

{

//在此处放置代码以加载您实际拥有的程序集的任何版本

v_AssemblyPath = @" Interop.SAPbobsCOM88.dll";

返回System.Reflection.Assembly.LoadFrom(v_AssemblyPath);

}

如果(requestedName.Name ==" Interop.SAPbobsCOM,版本= 9.2.0.0,文化=中性,PublicKeyToken =空")

{

//在此处放置代码以加载您实际拥有的程序集的任何版本

v_AssemblyPath = @" Interop.SAPbobsCOM92.dll";

返回System.Reflection.Assembly.LoadFrom(v_AssemblyPath);

}

其他

{

返回null;

}

};

动态o_Company = Activator.CreateInstance(Type.GetTypeFromProgID(" SAPbobsCOM.Company"));

o_Company.Server ="服务器名称";

o_Company.CompanyDB =" sql_db_name";

o_Company.DbUserName =" sa";

o_Company.DbPassword =" sa_password";

字符串v_Path = @" C:\ dev \ MultipleSAPVersions \ bin \ Debug \ Interop.SAPbobsCOM.dll";

System.Reflection.Assembly组装= System.Reflection.Assembly.LoadFrom(v_Path);

类型类型;

type = assembly.GetType(" SAPbobsCOM.BoDataServerTypes");

o_Company.DbServerType =(dynamic)Enum.Parse(type," dst_MSSQL2008");

o_Company.UserName ="经理";

o_Company.Password =" manager_password";

如果(o_Company.Connect()!= 0)

{

//错误

}

其他

{

//好!

}

我最终以更加整洁的方式解决了这个问题:多个VS解决方案都使用相同的代码:每个VS解决方案都包含链接到同一"黄金"解决方案的"项目"(阅读:c#代码)。

然后,每个VS解决方案都针对不同的SAP B1版本进行了编译。 (不同的VMware映像)。

一周热门 更多>