我在Visual Studio 2013中有一个C#大项目,它由以下部分组成:
- 3 网络项目
- 2 视窗服务项目
- 14 个 Dlls 项目
- 2 测试项目
- 1 数据库项目 (.sqlproj)
正如您可以猜到的,最终文件是:
- 3 网络项目
- 2 视窗服务
- 数据库
我用msbuild构建它.exe从PowerShell调用。
$msbuild="C:windowsMicrosoft.NETFramework64v4.0.30319MSBuild.exe"
$option0 = 'FOO.sln /t:Clean,Rebuild /p:Configuration=Debug /p:Outdir=$outputdir'
iex "$msbuild $option0" | tee C:TFSOscarBuildoscar.txt
项目构建,在输出文件夹中,我有一个名为 _PublishedWebsites 的漂亮目录,其中包含三个网站,每个目录中一个。从这里开始,使用PowerShell部署到服务器并不复杂。
在outputdir中,我有我的FooDB.dacpac,所以我可以轻松地使用sqlpackage将其部署到SQL Server。
我的问题是Windows服务。它们不在文件夹中,而是在输出文件夹中,与所有DLL,sqlproj文件,测试文件混合在一起。
有没有办法将它们放在类似于"_PublishedWebsites"的文件夹中?
我可以在部署时将所有文件复制到每个窗口服务文件夹,并且可以工作...但感觉不对劲...
是的! 您实际上可以使用 MSDeploy,它是 WebDeploy 的基础技术,为 Windows 服务或计划任务创建类似的部署包。
基本步骤是
- 扩展 MSBuild 以将文件压缩到包中
- 添加预/同步后命令
- 创建部署 CMD 以执行包
https://dotnetcatch.com/2016/03/18/deploy-non-web-apps-with-msdeploy/
我们一直在Windows Service项目中使用nuget包PublishApplications(实际上只是使用TopShelf 的控制台应用程序)。
结果,我们在这些服务的输出文件夹{OutDir}/_PublishedApplications/{appName}
({OutDir}/PublishedWebSites
旁边)中得到了一个打包得很好的应用程序。
我仍在寻找一种为*.sqlproj
项目获得类似行为的方法......