0

我正在开发 WCF 服务,该服务通过 MSI 包发布到 IIS 网站。我遇到的问题比任何事情都更令人烦恼,但如果可能的话,我仍然想要解决它。

在创建服务时,我们通过右键单击服务主机并选择“发布网站”将其发布到我们的开发服务器。当我们这样做时,将安装以下文件夹结构:

  • apsnet_client
  • 垃圾桶

bin目录中(连同引用服务的 DLL 文件),我有一个名为 的 DLL 文件App_Code.dll,其中包含我的文件的编译版本Service.cs,其中包含实际的服务代码。

显然我们不能使用 Visual Studio deploy 进入实时环境,所以我创建了一个 MSI 包来安装它。MSI 仅包含来自我的服务主机的内容文件,没有其他内容。

MSI 安装所需文件时,目录结构略有不同。它没有App_Code.dll文件,而是简单地在网站内​​创建一个App_Code目录并将Service.cs文件放在其中。这可行,我可以访问该服务,但我真的并不太热衷于让服务实例化代码坐在那里,让任何有权访问服务器的人进行更改。

所以基本上我需要做的是将网站发布的输出包含在我的 MSI 包中,以便我得到预编译App_Code- 有没有办法做到这一点?在我的解决方案中,没有设置Service.cs要编译的文件的选项,因此必须有另一种方法。

谢谢。

4

1 回答 1

1

在我的构建过程中,我使用 WebDeploy 基础结构创建一个 pubxml 文件,该文件使用 FileSystem WebPublishMethod 部署到我将称为“部署”的相对目录。这完全按照预期的方式对网站进行建模。然后我围绕该结构创作我的 MSI 并添加 IIS 元数据。

我不确定您使用的是什么 MSI 创作工具,但我喜欢使用 Windows Installer XML 和/或 InstallShield。我说和/或因为我会经常使用 WiX 和 IsWiX 创建一个合并模块来表达站点的内容,然后使用 InstallShield Limited Edition 来描述 IIS 元数据。

于 2013-10-23T12:55:26.630 回答