如何避免使用 MSBuild 混合输出文件



我在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项目获得类似行为的方法......

最新更新