如何避免与MSBuild混合输出文件?

时间:2016-04-22 10:04:58

标签: powershell build msbuild

我在Visual Studio 2013中有一个C#大项目,它由以下形成:

  • 3个Web项目
  • 2 Windows服务项目
  • 14 Dlls项目
  • 2个测试项目
  • 1数据库项目(.sqlproj)

您可以猜到最终文件是:

  • 3个Web项目
  • 2 Windows服务
  • 数据库

我使用从PowerShell调用的msbuild.exe构建它。

$msbuild="C:\windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe"
$option0 = 'FOO.sln /t:Clean,Rebuild /p:Configuration=Debug /p:Outdir=$outputdir'
iex "$msbuild $option0" | tee C:\TFS\Oscar\Build\oscar.txt

项目构建并在输出文件夹中有一个名为 _PublishedWebsites 的好目录,其中包含三个网站,每个目录中有一个。从这里开始,使用PowerShell部署到服务器并不复杂。

在outputdir中,我有 FooDB.dacpac ,因此我可以轻松地使用 sqlpackage 将其部署到SQL Server。

我的问题适用于Windows服务。它们不在文件夹中,而是在输出文件夹中,与所有DLL,sqlproj文件,测试文件混合。

有没有办法将它们放在类似于" _PublishedWebsites"

的文件夹中

我可以将所有文件复制到部署的每个Windows服务文件夹中并且可以正常工作......但感觉不对...

2 个答案:

答案 0 :(得分:1)

YES!实际上,您可以使用MSDeploy作为WebDeploy的基础技术,为Windows服务或计划任务创建类似的部署包。

基本步骤是

  • 扩展MSBuild以将文件压缩到包中
  • 添加前/后同步命令
  • 创建一个deploy cmd来执行包

https://dotnetcatch.com/2016/03/18/deploy-non-web-apps-with-msdeploy/

答案 1 :(得分:1)

我们在Windows服务项目中使用了nuget包PublishedApplications(实际上只是使用TopShelf的控制台应用程序)。

因此,我们在输出文件夹{OutDir}/_PublishedApplications/{appName}{OutDir}/PublishedWebSites旁边)中为这些服务获得了一个包装精美的应用程序。

我仍然在寻找一种方法来获得*.sqlproj项目的类似行为......