MSBuild:如何将生成的类包含到编译中?

MSBuild:如何将生成的类包含到编译中?,msbuild,code-generation,nswag,Msbuild,Code Generation,Nswag,我有以下MSBuild脚本: <Project Sdk="Microsoft.NET.Sdk"> <PropertyGroup> ... <BuildDependsOn> NSwag; $(BuildDependsOn) </BuildDependsOn> <!--<AfterTransform>NSwag</AfterTransform>--> <

我有以下MSBuild脚本:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
...
    <BuildDependsOn>
      NSwag;
      $(BuildDependsOn)
    </BuildDependsOn>
    <!--<AfterTransform>NSwag</AfterTransform>-->
  </PropertyGroup>

  <ItemGroup>
...
  </ItemGroup>

  <Target Name="NSwag" BeforeTargets="BeforeBuild">
    <Message Text="Generating C# client code via NSwag" Importance="high" />

    <!-- ISSUE HERE -->
    <Copy SourceFiles="..\..\MyClient.cs" DestinationFiles="Gen\MyClient.cs" />
  </Target>

</Project>
上面的目标NSwag将用于代码生成工具。但为了简化,我在这里只使用了一个文件复制命令

问题是在此目标中添加的.cs文件在MSBuild编译中不可见:

命名空间“MyNamespace”中不存在类型或命名空间名称“MyClient”

注意:仅当目标文件夹中不存在文件时,才会发生此问题

注意:我试图处理以下问题,但到目前为止没有成功:

  <Target Name="RemoveSourceCodeDuplicates" BeforeTargets="BeforeBuild;BeforeRebuild" DependsOnTargets="UpdateGeneratedFiles">
    <RemoveDuplicates Inputs="@(Compile)">
      <Output TaskParameter="Filtered" ItemName="Compile"/>
    </RemoveDuplicates>
  </Target>


我在这里遗漏了什么?

我想我找到了一个解决方法-首先检查并包含文件UpdateGeneratedFiles目标,然后生成它们NSwag目标。请参见下面的脚本:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
...
    <BuildDependsOn>
      NSwag;
      $(BuildDependsOn)
    </BuildDependsOn>
  </PropertyGroup>

  <Target Name="NSwag" BeforeTargets="BeforeBuild;BeforeRebuild"
          DependsOnTargets="UpdateGeneratedFiles">
    <Message Text="Generating C# client code via NSwag" Importance="high" />

    <Copy SourceFiles="..\..\MyClient.cs" DestinationFiles="Gen\MyClient.cs" />
  </Target>

  <Target Name="UpdateGeneratedFiles" BeforeTargets="BeforeBuild;BeforeRebuild" >
    <ItemGroup>
    <Compile Include="Gen\MyClient.cs" Condition="!Exists('Gen\MyClient.cs')" />
    </ItemGroup>
  </Target>

</Project>
<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
...
    <BuildDependsOn>
      NSwag;
      $(BuildDependsOn)
    </BuildDependsOn>
  </PropertyGroup>

  <Target Name="NSwag" BeforeTargets="BeforeBuild;BeforeRebuild"
          DependsOnTargets="UpdateGeneratedFiles">
    <Message Text="Generating C# client code via NSwag" Importance="high" />

    <Copy SourceFiles="..\..\MyClient.cs" DestinationFiles="Gen\MyClient.cs" />
  </Target>

  <Target Name="UpdateGeneratedFiles" BeforeTargets="BeforeBuild;BeforeRebuild" >
    <ItemGroup>
    <Compile Include="Gen\MyClient.cs" Condition="!Exists('Gen\MyClient.cs')" />
    </ItemGroup>
  </Target>

</Project>