如何从解决方案中的一个项目运行程序作为构建步骤?

Mis*_*sza 5 c# msbuild visual-studio visual-studio-2015

问题如下:我的VS2015解决方案有几个项目,其中包括A和B.

A是一个常规项目,包含一个程序/服务/代码,可以将某些源文件转换为已编译的资源(其思想是源是人类可维护的并且在源代码控制之下,但结果资源是机器优化的但不是源代码控制).

项目B包含一个这样的源文件,而不是逐字逐句地放在项目B的结果程序集中,我希望A中的程序将其"编译"到资源文件中,并且只将它放在程序集B中(以及项目B中的其他代码)正常编译).

+-------------------+                    +-----------------+
|Project A          |                    |Assembly A       |
|                   | +----------------> |                 |
|                   |                    |                 |
+-------------------+                    +-------+---------+
                                                 |
                                                 |
                +--------------------------------+------+
                |                                       |
+-------------------+                    +-----------------+
|Project B      |   |                    |Assembly B    |  |
|          +----+---+                    |        +-----v--+
|          |src.txt|| +----------------> |        |res.txt||
|          |       ||                    |        |       ||
|          +--------|                    |        +--------|
+-------------------+                    +-----------------+
Run Code Online (Sandbox Code Playgroud)

如何在Visual Studio 2015中执行此操作?

sti*_*ijn 2

基本原理很简单,可以这样实现:确保 A 在 B 之前构建,然后使用 A.exe 作为 B 中的预构建步骤。

要获得正确的构建顺序:在 VS 中打开包含两个项目的 .sln,右键单击项目 B,选择“构建依赖项 -> 项目依赖项...”并使项目 B 依赖于项目 A。在构建顺序选项卡中验证 A 将在 B 之前构建。

现在在文本编辑器中打开projectB,一直滚动到末尾并在</Project>结束标记之前添加类似以下内容:

<Target Name="GenerateSomeFile" BeforeTargets="Build">
  <PropertyGroup>
    <SourceFile>$(MsBuildThisFileDirectory)\in.cs</SourceFile>
    <TargetFile>$(MsBuildThisFileDirectory)\out.cs</TargetFile>
  </PropertyGroup>
  <Exec Command="/path/to/projectAOutputDir/A.exe $(SourceFile) $(TargetFile)"
</Target>
Run Code Online (Sandbox Code Playgroud)