C#如何自动将所有.cs文件包含在文件夹中进行编译?

时间:2017-06-12 07:00:35

标签: c# visual-studio t4 csproj

我有一个包含T4模板文件的项目,该文件根据另一个项目的输出(dll)生成几个.cs文件,这意味着数量和数量。生成的.cs文件的名称各不相同。现在我想:

  1. 运行T4模板以在构建之前生成.cs文件。
  2. 包含在构建中的第1点生成的.cs文件。
  3. 第1点由构建前目标存档。对于第2点,我尝试使用通配符将所有.cs文件包含在文件夹中,如:<Compile Include="GeneratedCode\*.cs" />,但问题是:

    1. 任何新生成的.cs文件都不包含在第一个版本的输出dll中,但包含在第二个版本中。
    2. VS不会刷新项目以显示新生成的.cs文件或删除不存在的.cs文件。
    3. 当我在VS中的文件夹下删除或添加.cs文件时,VS会使用分隔的包括<Compile Include="GeneratedCode\A.cs" />之类的命令替换通配符。
    4. 那么将所有.cs文件包含在文件夹中以便进行编译以解决至少问题1&amp;的正确方法是什么? 3?

      ++ BeforeBuild目标内容

      <PropertyGroup>
          <_CommonProgramFiles>$([System.Environment]::GetEnvironmentVariable('CommonProgramFiles(x86)'))</_CommonProgramFiles>
          <_CommonProgramFiles Condition=" '$(_CommonProgramFiles)' == '' ">$(CommonProgramFiles)</_CommonProgramFiles>       
          <TextTransformPath Condition="'$(TextTransformPath)' == ''">$(_CommonProgramFiles)\Microsoft Shared\TextTemplating\$(VisualStudioVersion)\TextTransform.exe</TextTransformPath>
          <!-- Initial default value -->
          <_TransformExe>$(TextTransformPath)</_TransformExe>
          <_TransformExe Condition="!Exists('$(_TransformExe)')">$(_CommonProgramFiles)\Microsoft Shared\TextTemplating\10.0\TextTransform.exe</_TransformExe>
          <_TransformExe Condition="!Exists('$(_TransformExe)')">$(_CommonProgramFiles)\Microsoft Shared\TextTemplating\11.0\TextTransform.exe</_TransformExe>
          <_TransformExe Condition="!Exists('$(_TransformExe)')">$(_CommonProgramFiles)\Microsoft Shared\TextTemplating\12.0\TextTransform.exe</_TransformExe>
          <_TransformExe Condition="!Exists('$(_TransformExe)')">$(_CommonProgramFiles)\Microsoft Shared\TextTemplating\13.0\TextTransform.exe</_TransformExe>
          <_TransformExe Condition="!Exists('$(_TransformExe)')">$(_CommonProgramFiles)\Microsoft Shared\TextTemplating\14.0\TextTransform.exe</_TransformExe>
      </PropertyGroup>
      <Target Name="TransformOnBuild" AfterTargets="BeforeBuild">
          <Error Text="Failed to find TextTransform.exe tool at '$(_TransformExe)." Condition="!Exists('$(_TransformExe)')"/>
      
          <ItemGroup>
              <_TextTransform Include="@(None)" Condition="'%(None.Generator)' == 'TextTemplatingFileGenerator'" />
          </ItemGroup>
          <!-- Perform task batching for each file -->
          <Exec Command="&quot;$(_TransformExe)&quot; &quot;%(_TextTransform.FullPath)&quot;"
              Condition="'%(_TextTransform.Identity)' != ''" 
              ContinueOnError="ErrorAndContinue" />
      </Target>
      

0 个答案:

没有答案