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

在构建过程中运行c#控制台应用程序,c#,visual-studio,build,msbuild,build-process,C#,Visual Studio,Build,Msbuild,Build Process,假设我们有一个包含三个项目的解决方案: DownloadDataBase是一个控制台应用程序,它从web下载数据并创建一个sqlitedb文件 Test是使用下载的sqlite数据库的应用程序的主窗口 TestLibrary是测试项目引用的类库 我知道如何使用build菜单中的configurationmanager对这三个项目的构建进行重新排序。但是主要问题是:如何定制解决方案的构建过程,以便: 它首先构建下载数据库 然后执行此控制台应用程序DownloadDataBase 之后,将创建的

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

  • DownloadDataBase
    是一个控制台应用程序,它从web下载数据并创建一个
    sqlite
    db文件
  • Test
    是使用下载的
    sqlite
    数据库的应用程序的主窗口
  • TestLibrary
    是测试项目引用的类库
  • 我知道如何使用build菜单中的
    configurationmanager
    对这三个项目的构建进行重新排序。但是主要问题是:如何定制解决方案的构建过程,以便:

    • 它首先构建
      下载数据库
    • 然后执行此控制台应用程序
      DownloadDataBase
    • 之后,将创建的
      sqlite
      文件从最后一步复制到
      Test
      项目的资源目录
    • 最后使用更新的
      sqlite
      文件构建
      Test
      项目
    因此,每次构建新版本时,我都会获得应用程序所需的最新数据


    感谢您的帮助

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

    例如,在DownloadDatabase项目中,在XML文件底部的
    元素中添加:

    <Target AfterTargets="AfterBuild">
        <Exec Command="$(ProjectDir)$(OutputPath)$(AssemblyName).$(OutputType)" />
        <Copy SourceFiles="$(ProjectDir)$(OutputPath)file.db" DestinationFolder="$(SolutionDir)Test" />
    </Target>
    
    
    
    可能有一些错误,但最终需要使用MSBuild任务来执行这些操作


    有关详细信息,请参阅和MSBuild任务文档页。

    查看每个项目属性中的“编译事件”。也许您正在寻找的是本地运行还是在tfs构建服务器上运行?如果是tfs:您可以在构建模板(xaml文件)中定义自定义步骤。本地:制作“DownloadDatabaseProject”的独立可执行文件,并将其作为测试程序的预构建步骤启动(您可以在测试项目的属性中设置它,它位于“构建事件”选项卡下)@NickOtten不再是XAML;P XAML死在TFSBuild@Mat我有更多的理由开始对老板唠叨一段时间update@NickOtten是的,XAML是一场噩梦……如果文件名或任何父文件夹之间有空格,您将得到错误退出,代码为9009