【问题标题】:How to avoid mixed output files with MSBuild?如何避免与 MSBuild 混合输出文件?
【发布时间】:2016-08-15 21:45:29
【问题描述】:

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

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

你可以猜到最终的文件是:

  • 3 个网络项目
  • 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 服务文件夹,并且可以工作...但感觉不对...

【问题讨论】:

    标签: powershell build msbuild


    【解决方案1】:

    是的!您实际上可以使用 WebDeploy 的底层技术 MSDeploy 为 Windows 服务或计划任务创建类似的部署包。

    基本步骤是

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

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

    【讨论】:

      【解决方案2】:

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

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

      我仍在为*.sqlproj 项目寻找类似行为的方法...

      【讨论】:

      • 如果您遇到问题,将标记为 Copy Always 的所有 Content 都复制到根文件夹而不是分层,请参阅我对此 SO article 的回答。
      猜你喜欢
      • 2016-07-16
      • 2021-06-23
      • 2017-12-15
      • 2021-08-10
      • 2016-03-05
      • 1970-01-01
      • 2019-03-19
      • 2012-12-09
      • 1970-01-01
      相关资源
      最近更新 更多