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