C# 使用“通过MSI安装WCF服务”;出版「;VisualStudio输出

C# 使用“通过MSI安装WCF服务”;出版「;VisualStudio输出,c#,wcf,windows-installer,C#,Wcf,Windows Installer,我正在使用WCF服务,该服务通过MSI包发布到IIS网站。我遇到的问题比什么都麻烦,但如果可能的话,我还是希望能找到解决的办法 在我们创建服务的同时,我们通过右键单击服务主机并选择“发布网站”将其发布到我们的开发服务器。执行此操作时,将安装以下文件夹结构: apsnet_客户端 垃圾箱 在bin目录中(以及引用服务的DLL文件),我有一个名为App_code.DLL的DLL文件,其中包含我的service.cs文件的编译版本,其中包含实际的服务代码 显然,我们不能使用VisualStudio

我正在使用WCF服务,该服务通过MSI包发布到IIS网站。我遇到的问题比什么都麻烦,但如果可能的话,我还是希望能找到解决的办法

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

  • apsnet_客户端
  • 垃圾箱
bin
目录中(以及引用服务的DLL文件),我有一个名为
App_code.DLL
的DLL文件,其中包含我的
service.cs
文件的编译版本,其中包含实际的服务代码

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

当MSI安装所需文件时,目录结构略有不同。它不存在
App\u code.dll
文件,而是在网站中创建
App\u code
目录,并将
Service.cs
文件放在其中。这是可行的,我可以访问服务,但我真的不太喜欢让服务实例化代码坐在那里,让任何有权访问服务器的人都可以更改

因此,基本上我需要做的是将网站发布的输出包含在我的MSI包中,这样我就可以得到预编译的
App\u code
-有什么方法可以做到这一点吗?在我的解决方案中,没有设置要编译的
Service.cs
文件的选项,因此必须有另一种方法来完成


谢谢。

在我的构建过程中,我使用WebDeploy基础设施创建了一个pubxml文件,该文件使用文件系统WebPublishMethod部署到一个我称之为“deploy”的相对目录。这一模型完全符合网站的设计意图。然后,我围绕该结构编写MSI,并添加IIS元数据

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