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
. AssignTargetPaths
je 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.