繁体   English   中英

Regasm找不到嵌入式程序集

[英]Regasm can't find embedded assemblies

我正在开发一个.Net组件,该组件将作为插件存在于Windows应用程序中。 该插件将使用regasm在客户端计算机上注册。 我的组件嵌入了大多数依赖关系,并在需要时将程序集返回给AppDomain。 如果我尝试在单个dll上运行regasm,它将失败,因为它无法在文件夹中找到依赖项。 在客户端计算机上安装组件时,这将是一个问题。

有没有办法告诉regasm从哪里获取嵌入式dll?

到目前为止,我已经尝试过:

  1. 向附近的dll注册该组件,然后将单个dll复制到运行时文件夹。 我的组件正常工作,并且在运行时发现了dll,但这不是部署的选项。

  2. 使用ComRegisterFunctionAttribute进行挂钩。 仅在dll附近时才调用此方法,因此它并不比#1好。

我无法控制高潮会被召唤的事实。 没有让我的部件一个DLL,但它会使部署相当容易提供的,我可以解决这个问题。

新答案:

我猜想您的[ComRegisterFunction]是在类中的方法中引用了其他程序集中的一种的类型。 您的代码可能无法运行,因为它无法JIT编译ComRegister方法,因为它无法找到类或方法中某一类型的程序集。

尝试创建一个没有外部依赖关系的类(.net框架除外),然后将ComRegisterFunction属性放入该类中。 在此处进行安装工作,但仅动态加载其他类型的程序集,以便您可以使用自定义代码查找外部程序集。

ld00d,我有同样的问题。 您是如何做到的:“我在COM注册的dll中删除了引用”? 对我来说,这听起来像魔术。 您是否先使用ildasm然后使用ilasm?

我认为没有针对regasm.exe这个严重问题的解决方案。

只有对程序集GetReferencedAssemblies [ComRegisterFunction]验证成功结束时, [ComRegisterFunction]才会调用[ComRegisterFunction]方法。 您可以尝试ildasm,然后再ilasm删除这些引用,但我认为这可能会带来混乱。 我也不知道如果您取消使用代码会发生什么。

我的解决方法:

  1. 在安装过程中,将regasm.exe要求的那些DLL复制到DLL的文件夹中。

  2. 在regasm.exe完成DLL的注册后,将其删除。

不好(安装程序软件会占用大量磁盘空间),但是可以工作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM