我正在使用Websphere MQ。我需要将特定的JAR文件转换为DLL。 Here是来自WMQ客户端的JARS集合。 Here是集合的JAR Analyzer文件,列出了各种传入和传出依赖项。
我要转换的文件是com.ibm.mq.jar
,它具有以下传出依赖项 -
com.ibm.mq.commonservice.jar
com.ibm.mq.headers.jar
com.ibm.mq.jmqi.jar
问题是我不知道在命令提示符下传递什么命令来转换jar而不会丢失任何类。
基本上,我需要访问属于com.ibm.mq.jar
的MQMessage和MQMD,但是当我自己转换它时,那些特定的类不会被导入。
我看了一下another similar StackOverflow Question,但主要区别在于依赖关系是循环的。
例如,com.ibm.mq.headers.jar
取决于com.ibm.mq.jmqi.jar
,反之亦然。
答案 0 :(得分:2)
我不知道你为什么不读我给的MQ链接。
(1)创建一个纯粹的“.NET托管”MQ应用程序
int openOptions = MQC.MQOO_OUTPUT + MQC.MQOO_FAIL_IF_QUIESCING;
Hashtable qMgrProp = new Hashtable();
qMgrProp.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_MANAGED); /* very important */
qMgrProp.Add(MQC.HOST_NAME_PROPERTY, "10.10.10.10");
qMgrProp.Add(MQC.CHANNEL_PROPERTY, "TEST.CHL");
qMgrProp.Add(MQC.PORT_PROPERTY, 1414);
qMgrProp.Add(MQC.USER_ID_PROPERTY, "myUserID");
try
{
MQQueueManager _qMgr = new MQQueueManager("MQA1", qMgrProp);
MQQueue queue = _qMgr.AccessQueue("TEST.Q", openOptions, null, null, null);
/* Do whatever you want to do */
queue.Close();
_qMgr.Disconnect();
}
catch (MQException mqex)
{
System.Console.Out.WriteLine("MQTest01 cc=" + mqex.CompletionCode + " : rc=" + mqex.ReasonCode);
}
(2)编译它。
C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\csc.exe /nologo /t:exe /r:System.dll /r:"C:\Program Files (x86)\IBM\WebSphere MQ\bin\amqmdnet.dll" /out:bin\Release\Test.exe Test.cs Properties\AssemblyInfo.cs
(3)创建存储Test.exe的“Test.config”文件(与Test.exe一起使用)
<configuration>
<appSettings>
<add key="NMQ_MQ_LIB" value="managed"/>
</appSettings>
</configuration>
(4)将3个文件复制到目标PC:Test.exe,Test.config和amqmdnet.dll,然后运行它。您可能需要更新PATH环境变量以指向amqmdnet.dll所在的目录。通常不需要这样做,但有时Windows会挑剔。
答案 1 :(得分:0)
谈论让你的生活比你需要的更困难。使您的应用程序成为“受管理的”#39;应用程序然后您需要的是名为amqmdnet.dll的MQ dll(由IBM提供,它包含您需要的所有内容)。
因此,您可以在没有完整安装MQ的情况下运行.NET应用程序。当然,IBM不支持在您的应用程序中部署amqmdnet.dll文件,但您尝试进行的设置也不复杂。