为了在 Windows Azure 云服务上注册 AspPDF 和 AspJPEG 组件,必须将 DLL 注册过程合并到部署例程中。当 Azure 解压应用程序时,它必须触发命令来注册 DLL,该命令必须保留在所有 VM 上,以确保这些依赖项在云环境中一致工作。
为了实现这一点,我们可以指示在目标服务器上执行命令文件。此任务在 ServiceDefinition.csdef 文件中定义如下:
<Startup>
<Task commandLine="RegisterPersits.cmd" executionContext="elevated" taskType="simple" />
</Startup>
提升的执行上下文确保必须在服务上线之前执行此过程。 Azure Fabric 控制器将在 BIN 文件夹中查找 .cmd 文件。您可以在记事本中创建 .cmd,然后更改扩展名。这是 .cmd 文件的内容。
chcp 1252>NUL
regsvr32 /s .\library\asppdf64.dll
regsvr32 /s .\library\aspjpeg64.dll
exit /b 0
我们使用参数 /s 调用 regsvr32 工具,这确保响应是静默的,即没有会混淆结构控制器的弹出窗口。这很重要,因为我浪费了大量时间想知道为什么部署过程挂在初始化阶段......添加 /s 参数解决了这个问题!
就我而言,我将 DLL 放置在名为“库”的文件夹中,但您可以将它们放置在您喜欢的任何位置,只要它们在 .cmd 文件中正确引用即可。还要确保为 Visual Studio 中的启动命令中引用的任何 DLL 设置以下文件属性:
构建动作: Content
复制到输出目录: Always
这个注册 DLL 的额外过程给部署过程增加的时间几乎可以忽略不计。 AspPDF 特有的另一点是使用正确的 DLL 版本的重要性。 Persits 发布 32 位和 64 位 dll,Azure VM 在 64 位环境中运行,因此在上述过程中注册 asppdf64.dll 很重要,注册 32 位 dll 会在应用程序中引发模糊错误。幸运的是,您不需要为 64 位版本的 AspPDF 购买单独的许可证。
我希望这能够帮助其他面临类似问题的人将 com 类组件(例如 AspPDF)迁移到 Azure。