Sdílet prostřednictvím


Přizpůsobení sestavení pro zpracování vygenerovaných souborů

V libovolném sestavení se soubory, které se vygenerují během sestavení, se chovají jinak než statické soubory (například zdrojové soubory). Z tohoto důvodu je důležité pochopit , jak MSBuild buildy projekty. Dvě fáze jsou fáze vyhodnocení a fáze provádění. Během fáze vyhodnocení nástroj MSBuild přečte váš projekt, naimportuje vše, vytvoří vlastnosti, rozšíří globy pro položky a nastaví proces sestavení. Během fáze provádění nástroj MSBuild provádí sestavení spuštěním cílů a úloh s daty, která parsovala během fáze vyhodnocení.

Soubory vygenerované během provádění během fáze vyhodnocení neexistují, proto nejsou zahrnuty do procesu sestavení. Chcete-li tento problém vyřešit, musíte do procesu sestavení ručně přidat vygenerované soubory. Doporučeným způsobem, jak to udělat, je přidání nového souboru do cílového Content souboru nebo None položek před BeforeBuild cíl, jak je znázorněno v následujícím příkladu:

<Target Name="MyTarget" BeforeTargets="BeforeBuild">
  
  <!-- Some logic that generates your file goes here -->
  <!-- Generated files should be placed in $(IntermediateOutputPath) -->

  <ItemGroup>
    <!-- If your generated file was placed in `obj\` -->
    <None Include="$(IntermediateOutputPath)my-generated-file.xyz" CopyToOutputDirectory="PreserveNewest"/>
    <!-- If you know exactly where that file is going to be, you can hard code the path. -->
    <None Include="some\specific\path\my-generated-file.xyz" CopyToOutputDirectory="PreserveNewest"/>
    
    <!-- If you want to capture "all files of a certain type", you can glob like so. -->
    <None Include="some\specific\path\*.xyz" CopyToOutputDirectory="PreserveNewest"/>
    <None Include="some\specific\path\*.*" CopyToOutputDirectory="PreserveNewest"/>
  </ItemGroup>
</Target>

Přidání vygenerovaného souboru do None procesu sestavení nebo Content jeho dostatek k jeho zobrazení Chcete také zajistit, aby se přidal ve správný čas. V ideálním případě cíl běží před BeforeBuild. AssignTargetPathsje dalším možným cílem, protože je poslední příležitost upravovat a Content položky None (mimo jiné) před jejich transformací na nové položky. Viz běžné typy položek.