我目前正在编写一个对混合模式组件(包含本机代码的组件)具有特定依赖性的PowerShell Snapin,该依赖性专门针对X64或X86。我都有两个版本的依赖组件,但我想知道如何最好地管理此Snapin的构建和部署:

  1. 是否有必要有两个版本的Snapin,一个X86和一个X64,并使用两种不同版本的安装图安装它,一次为每个体系结构安装吗?
  2. 假设#1是正确的,是否建议在不同的“程序文件”和“程序文件(x86)”目录中安装两个不同版本的Snapin?
  3. 为了为两个不同的体系结构构建,构建一对共享所有内容的项目的理想(最小麻烦)方法是什么?
  4. 如果Snapin被编译为“ AnyCPU”,并且依赖性DLL都加载到GAC中,那么运行时是否会根据当前运行的PowerShell主机的体系结构加载正确的GAC组件?
  5. 是否有一种光滑的方法来在运行时动态地选择加载的依赖性DLL(如果无法在GAC中安装在GAC中),而又不会遇到带有装配负载上下文的头痛?
有帮助吗?

解决方案 2

我最终创建了一个模块(谢谢理查德!),但这并没有解决与处理器体系结构有关的问题。为了解决这个问题,我将两个版本的依赖性DLL的两个版本都放在模块目录中,在每个CMDLET的构造函数中,我放入了一些初始化代码(仅运行一次)以加载依赖性DLL的适当版本。

谢谢,所有的指示。

其他提示

马克,我们的情况下,Powershell社区扩展具有32位和64位版本的7zip.dll。您可以通过在Snapin启动的早期(或需要在需要拨打本机DLL之前)来轻松地解决此问题。然后,您可以测试您是32位还是64位进程(intptr.size),然后使用LoadLibrary PinVoke手动加载正确的DLL。之后,dllimport(“ yournative.dll”)会注意到dll已经加载并使用该dll。

查看这两个PSCX源代码文件:http://pscx.codeplex.com/sourcecontrol/changeset/view/74794?projectName = PSCX#1358100 http://pscx.codeplex.com/sourcecontrol/changeset/view/74794?projectName = PSCX#1358102

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top