【问题标题】:Run a c# console application in build process在构建过程中运行 c# 控制台应用程序
【发布时间】:2023-03-19 05:52:01
【问题描述】:

假设我们有一个包含三个项目的解决方案:

  1. DownloadDataBase 是一个控制台应用程序,它从 Web 下载数据并创建一个 sqlite db 文件
  2. Test 是使用下载的sqlite 数据库的应用程序的主窗口。
  3. TestLibrary 是 Test 项目引用的类库。

我知道如何使用构建菜单中的Configuration Manager 重新排序这三个项目的构建。但是主要问题是:如何自定义解决方案的构建过程,以便:

  • 它首先构建DownloadDataBase
  • 然后执行这个控制台应用程序DownloadDataBase
  • 然后将上一步创建的sqlite文件复制到Test项目的资源目录中
  • 最后使用更新的sqlite 文件构建Test 项目?

因此,每次构建新版本时,我都会获得应用程序所需的最新数据。

感谢您的帮助

【问题讨论】:

  • 查看每个项目属性中的“编译事件”。也许是你正在寻找的
  • 这是在本地运行还是在 tfs 构建服务器上运行? if tfs: 您可以在构建模板(xaml 文件)中定义自定义步骤。本地:制作“DownloadDatabaseProject”的独立可执行文件并将其作为测试程序的预构建步骤启动(您可以在测试项目的属性中设置它,位于构建事件选项卡下)
  • @NickOtten 不再是 XAML ;P XAML 在 TFSBuild 中已死
  • @MatíasFidemraizer:我更有理由开始唠叨老板更新了
  • @NickOtten 是的,XAML 是一场噩梦......

标签: c# visual-studio build msbuild build-process


【解决方案1】:

您需要自定义您的 MSBuild 项目文件(即.csproj 文件)。

例如,在您的 DownloadDatabase 项目中,在 XML 文件底部的 <project> 元素内添加:

<Target AfterTargets="AfterBuild">
    <Exec Command="$(ProjectDir)$(OutputPath)$(AssemblyName).$(OutputType)" />
    <Copy SourceFiles="$(ProjectDir)$(OutputPath)file.db" DestinationFolder="$(SolutionDir)Test" />
</Target>

也许有一些错误,但归根结底,您需要使用 MSBuild 任务来执行这些操作。

请参阅ExecCopy MSBuild 任务文档页面以获取更多详细信息。

【讨论】:

  • 如果文件名或任何父文件夹之间有空格,您将收到错误退出代码 9009
猜你喜欢
  • 1970-01-01
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-16
  • 2013-06-10
  • 1970-01-01
  • 2011-01-22
相关资源
最近更新 更多