在构建过程中运行C#控制台应用程序

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

enter image description here

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

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

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

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

感谢任何帮助


请查看每个项目属性中的“编译事件”。也许这就是你要找的。 - Pikoh
这是在本地运行还是在TFS构建服务器上运行?如果是TFS:您可以在构建模板(即XAML文件)中定义自定义步骤。如果是在本地运行:请制作“DownloadDatabaseProject”的独立可执行文件,并将其作为测试程序的预构建步骤启动(您可以在测试项目属性中设置,在构建事件选项卡下)。 - Nick Otten
@NickOtten 不再使用XAML了 ;P XAML在TFSBuild中已经死亡 - Matías Fidemraizer
@MatíasFidemraizer:这更加促使我开始向我的老板催促更新了。 - Nick Otten
@NickOtten 是的,XAML 是一场噩梦... - Matías Fidemraizer
1个回答

6
你需要自定义你的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退出的问题。 - Dreamweaver

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接