RegAsmregfile开关不提供与代码库开关相同的输出需要一些理由,这样我的老板和我的妻子就不会解雇我根据MSDN:/regfile开关“为程序集生成一个指定的.reg文件”/codebase开关“创建一个代码库条目,指定程序集的文件路径”我我猜这是做同一件事的两种不同方式。事实是,我错了:方法1C:>"C:WindowsMicrosoft.NETFrameworkv4.0.30319RegAsm.exe""C:SERVER.dll"/regfileRegistryscript'C:SERVER.reg'generatedsuccessfullyReg文件输出:REGEDIT4[HKEY_CLASSES_ROOTxfeed.server.X]@="SERVER.XLS"[HKEY_CLASSES_ROOTxfeed.server.XCLSID]@="{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}"[HKEY_CLASSES_ROOTCLSID{8F4A5B5E-8DD7-30A3-8CCFE-1}@5="SERVER.XLS"[HKEY_CLASSES_ROOTCLSID{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}InprocServer32]@="mscoree.dll""ThreadingModel"="Both""Class"="SERVER.XLS""Assembly"="SERVER,Version=1.0.0.0,Culture=neutral,PublicKeyToken=6e3de07ee666a5f5""RuntimeVersion"="v2.0.50727"[HKEY_CLASSES_ROOTCLSID{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}InprocServer321.0.0.0]"SERVER.Class"XLS""Assembly"="SERVER,Version=1.0.0.0,Culture=neutral,PublicKeyToken=6e3de07ee666a5f5""RuntimeVersion"="v2.0.50727"[HKEY_CLASSES_ROOTCLSID{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}ProgId]@="xfeed.server.X"[HKEY_CLASSES_ROOTCLSID{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}ImplementedCategories{62C8FE65-4EBB-45E7-B440-6E39B2CDBF29}]方法2但是当我直接执行代码库切换命令而不是使用reg文件时,regsitry中受影响的密码密钥不同(并且有效,与之前的输出相反)C:>"C:WindowsMicrosoft.NETFrameworkv4.0.30319RegAsm.exe""C:SERVER.dll"/codebaseTypesregisteredsuccessfullyRegistryouptutwithcodebase:WindowsRegistryEditorVersion5.00[HKEY_CLASSES_ROOTWow6432NodeCLSID{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}]@="SERVER.XLS"[HKEY_CLASSES_ROOTWow6432NodeCLSID{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}ImplementedCategories][HKEY_CLASSES_ROOTWow6432NodeCLSID{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}实施类别{62C8FE65-4EBB-45e7-B440-6E39B2CDBF29}][HKEY_CLASSES_ROOTWow6432NodeCLSID{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}InprocServer32]@="mscoree.dll""ThreadingModel"="Both""ERClass."XLS""Assembly"="SERVER,Version=1.0.0.0,Culture=neutral,PublicKeyToken=6e3de07ee666a5f5""RuntimeVersion"="v2.0.50727""CodeBase"="file:///C:/SERVER.DLL"[HKEY_CLASSES_ROOTWow6432NodeCLSID{8F4A5B5E-8DD7-30A3-993F-18C7E2C457CF}InprocServer321.0.0.0]"Class"="SERVER.XLS""Assembly"="SERVER,Version=1.0.0.0,文化=中性,PublicKeyToken=6e3de07ee666a5f5""RuntimeVersion"="v2.0.50727""CodeBase"="file:///C:/SERVER.DLL"[HKEY_CLASSES_ROOTWow6432NodeCLSID{8F4A5C5E-8DD7-30A3-9C7E2C-18}ProgId]@="xfeed.server.X"你可以注意到现在Wow6432Node里的东西和信息更全面了(尤其是CodeBase!!!)如果有人能给我一个合理的理由,那么我就可以避免提及那天的灵异活动导致你失去工作,我真的很感激代码库标志告诉regasm你正在注册一个DLL,引用文件的实际位置如果你将dll与你部署的应用程序一起存储并且你不希望它在GAC,这将非常有用。如果不使用此标志,则必须将DLL放入GAC中以实现其全部功能。regfile标志告诉regasm你想要输出注册表文件而不是实际注册dll。如果您希望注册表文件输出还包括注册表以外的dll位置的数据,您可以将它们一起使用,我认为您认为这是一种或两种情况。编辑:根据您的评论进一步解释。RegAsm通常会注册有关.dll的基本信息,因为假定它将加载到GAC中。GAC中的任何内容都以允许系统控制程序集并将程序集加载到内存中的方式注册。当您在32位系统上并使用代码库标志时,它几乎直接将“代码库”值键添加到定义程序集的注册表项,然后将其值设置为.dll实际所在的路径.当你用这种方式注册它时,它基本上告诉计算机,它要在哪里使用程序集,它可以在哪里找到代码,以及如何将它加载到内存中。有时这会导致超出GAC所需的额外密钥,以便调用进程知道访问程序集的最佳方式。现在,由于您使用的是64位系统,您将面临额外的挑战。有一些规则可以在整个计算机中将32位和64位应用程序分开。这就是为什么有2个程序文件文件夹,以及注册表具有wow32部分的原因。如果一个32位的dll被注册了,当它用/codebase标志完成时需要存储在注册表的这一部分,以便32位应用程序可以找到它(这是他们唯一可以访问的注册表部分)。如果它是64位dll,则不需要在注册表的这一部分中。现在,由于此信息,如果您使用文件的输出来编写安装程序的注册表脚本部分的脚本,您将需要检查目标机器以确定该信息是否需要在用户wow部分中,或者正常注册表部分,并在运行脚本之前执行此操作以进行适当的更改。以上是C#学习教程:RegAsmregfile开关不提供与codebase开关相同的输出。如果对大家有用,需要进一步了解C#学习教程,希望大家多多关注。本文来自网络收集,不代表侵权,请点击右边联系管理员删除。如需转载请注明出处:
