我们有一个托管的.Net COM +组件,它继承自ServicedComponent
,并试图将其用作Windows Server 2003上IIS 6.0中的Web应用程序的并排程序集。
我们使用mt.exe
生成了一个程序集清单,并且已在测试控制台应用程序中以并行模式成功运行它。但是,当涉及到IIS时,它似乎不起作用,而不是读取清单从注册表中试图在那里找到COM +应用程序。
使用生成清单
然后将mt.exe -managedassemblyname:myassembly.dll -out:myassembly.manifest
复制到Web应用程序的虚拟目录中。使用filemon
显示清单永远不会被读取!
将.manifest
文件移动到bin
目录,然后似乎可以读取,但是会出现同样的问题。
非常感谢任何成功完成此项工作的人的帮助。
答案 0 :(得分:0)
以“.manifest”结尾的外部清单仅会自动获取可执行文件。 因此,您必须告诉IIS或Windows有关您的清单,或者没有人愿意阅读它。
大概在您的控制台应用程序测试中,可执行文件的清单可以引用MyAssembly
或直接包含相关信息。
现在,我对这里的ServicedComponent
并不十分熟悉,所以我将以一般性的方式进行讨论。
MyAssembly
的所有软件,您可以先故意加载清单中的信息,将该信息激活到线程上,调用MyAssembly
,然后停用。这是满足这种插件体系结构的最佳方法,因为您没有污染父进程,您只需在代码运行期间配置代码运行的线程。
这种方法是通过调用激活上下文API完成的,您可以在与All-in One Code Framework MyAssembly
的所有代码(如果它是由IIS自动调用),或者如果它在太多地方被调用,并且上面提到的方法成本太高,您可以总是在这里试试“hackaround”。
获取IIS6.0工作进程可执行文件,并编辑其清单(如果有),或者如果没有,则添加新清单(不要忘记检查它是否具有嵌入式清单),以依赖MyAssembly
。在这种方法中,MyAssembly
的清单内容基本上成为IIS6中运行的任何代码的运行上下文的一部分,因此它是一种非常重要的方法。