我正在开发一个WCF服务,该服务通过MSI包发布到IIS网站。我遇到的问题比任何事情都更令人烦恼,但如果可能的话,我仍然想要解决这个问题。
在我们创建服务的同时,我们通过右键单击服务主机并选择“发布网站”将其发布到我们的开发服务器。执行此操作时,将安装以下文件夹结构:
在bin
目录(以及引用该服务的DLL文件)中,我有一个名为App_Code.dll
的DLL文件,其中包含我的Service.cs
文件的编译版本,包含实际的服务代码。
显然我们不能使用Visual Studio部署进入实时环境,所以我创建了一个MSI包来安装它。 MSI只包含来自我的服务主机的内容文件,而不是其他内容。
当MSI安装所需文件时,目录结构略有不同。它不是存在App_Code.dll
文件,而只是在网站中创建一个App_Code
目录,并将Service.cs
文件放在那里。这有效,我可以访问该服务,但我真的不太热衷于让服务实例化代码只是坐在那里有权访问服务器的任何人进行更改。
所以基本上我需要做的是在我的MSI包中包含网站发布的输出,这样我就可以得到预编译的App_Code
- 有没有办法做到这一点?在我的解决方案中,没有选项可以设置要编译的Service.cs
文件,因此必须有另一种方法来执行此操作。
感谢。
答案 0 :(得分:1)
在我的构建过程中,我使用WebDeploy基础结构创建一个pubxml文件,该文件使用FileSystem WebPublishMethod部署到我称之为“Deploy”的相对目录。这样可以完全按照预期的方式对网站进行建模。然后我围绕该结构编写我的MSI并添加IIS元数据。
我不确定您使用的是哪种MSI创作工具,但我喜欢使用Windows Installer XML和/或InstallShield。我说和/或因为我经常使用WiX和IsWiX来创建合并模块来表达网站的内容,然后使用InstallShield Limited Edition来描述IIS元数据。