MSBuild任务不会导致生成的C#文件编译

4
我一直在尝试编写一个MSBuild任务,将CoCo/R .ATG文件“编译”成C#文件,然后将其编译成可执行文件,以取代预构建事件。
我已经成功实现了.ATG -> .cs的过程,但是由于生成的.cs文件没有被编译,所以似乎出了些问题。
如果我再次修改.ATG文件,则“旧”的.cs文件似乎会被编译,然后生成新的文件。
我相当确定我遗漏了某些东西,需要通知其他构建过程这些文件已更改。

以下是我在Visual Studio 2010项目中包含的目标定义。

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

  <ItemGroup>
    <AvailableItemName Include="BuildATG" />
  </ItemGroup>

  <PropertyGroup>
    <CoreBuildDependsOn>
      BuildATGTarget;
      $(CoreBuildDependsOn)
    </CoreBuildDependsOn>
  </PropertyGroup>

  <Target Name="BuildATGTarget" Inputs="@(BuildATG)" Outputs="@(BuildATG -> '%(RelativeDir)Parser.cs')">
    <Exec Command="Coco.exe %(BuildATG.Identity)" Outputs="%(BuildATG.RelativeDir)Parser.cs" />
  </Target>

</Project>

我完全不了解MSBuild,因此任何建议/指针都将不胜感激。

1个回答

1
我找到的一个可能的解决方案是进行以下更改并在目标内添加一个ItemGroup。
<Target Name="BuildATGTarget" Inputs="@(BuildATG)" Outputs="@(BuildATG -> '%(RelativeDir)Parser.cs')">
  <Exec Command="Coco.exe %(BuildATG.Identity)" Outputs="%(BuildATG.RelativeDir)Parser.cs" />
  <ItemGroup>
    <Compile Include="%(BuildATG.RelativeDir)Parser.cs" />
    <Compile Include="%(BuildATG.RelativeDir)Scanner.cs" />
  </ItemGroup>
</Target>

为避免构建中出现重复文件,您还需要在 Visual Studio 2010 项目中将文件(Parser.cs 和 Scanner.cs)标记为Build Action: None

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