我最近开始了我们的.NET应用程序迁移到Windows Azure云服务的过程。 我们应用在很大程度上取决于许多COM类组分,这些组分包括AspPDF(对于PDF生产和操作)和ASPJPEG(对于图像尺寸调整)。 在一个典型的非云IIS设置我只想注册我们的生产服务器上的DLL(使用REGSVR32)和所有将被罚款!
在Azure的过程略有不同,我会回答我的问题,以帮助那些有类似的挑战。 这种方法可用于那些需要在服务器上注册的部署过程的一部分的任何DLL。
我最近开始了我们的.NET应用程序迁移到Windows Azure云服务的过程。 我们应用在很大程度上取决于许多COM类组分,这些组分包括AspPDF(对于PDF生产和操作)和ASPJPEG(对于图像尺寸调整)。 在一个典型的非云IIS设置我只想注册我们的生产服务器上的DLL(使用REGSVR32)和所有将被罚款!
在Azure的过程略有不同,我会回答我的问题,以帮助那些有类似的挑战。 这种方法可用于那些需要在服务器上注册的部署过程的一部分的任何DLL。
为了在Windows Azure云服务注册AspPDF和ASPJPEG组件DLL注册过程必须纳入部署程序。 当Azure的拆包必须火命令注册DLL文件的应用程序,这必须在所有VM坚持,以确保这些依赖关系在云环境中工作始终。
要做到这一点,我们可以指示要在目标服务器上执行的命令文件。 这个任务是在ServiceDefinition.csdef中文件中定义如下:
<Startup>
<Task commandLine="RegisterPersits.cmd" executionContext="elevated" taskType="simple" />
</Startup>
高架执行上下文确保服务发布之前这个过程中必须进行。 在Azure结构控制器将看在BIN文件夹.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设置下列文件属性:
生成操作:内容
复制到输出目录:始终
此为注册DLL附加过程添加的时间几乎可忽略的量,以在部署过程。 具体到AspPDF的另一点,是使用正确的DLL版本的重要性。 Persits发布32位和64位的DLL,Azure的虚拟机在64位环境中运行因此注册asppdf64.dll在上述过程中,注册一个32位的DLL会引发你的应用程序中一个明确的错误是很重要的。 幸运的是,你并不需要购买单独的许可证AspPDF的64位版本。
我希望这将帮助其他面临迁移的COM类组件如AspPDF天青类似的问题。