Udostępnij za pośrednictwem


Buduje przyrostowe

Przyrostowe kompilacje są kompilacje, które są zoptymalizowane tak, że cele, które mają pliki wyjściowe, które są aktualne w odniesieniu do ich odpowiednich plików wejściowych nie są wykonywane.Element docelowy może mieć zarówno Inputs atrybut, który wskazuje, jakie elementy docelowe wejściową i Outputs atrybut, który wskazuje, jakie elementy to daje jako dane wyjściowe.Program MSBuild próbuje znaleźć 1-1 mapowania między wartości tych atrybutów.Jeśli istnieje mapowanie 1-1, program MSBuild porównuje sygnaturę czasową, co wprowadzania elementu sygnatury czasowej jego odpowiadający mu element danych wyjściowych.Wszystkie pliki wejściowe są porównywane pliki wyjściowe mapowania 1-1.Element jest uważany za aktualne, jeśli jej plik wyjściowy jest tym samym wieku lub starsze niż jego pliku wejściowego lub plików.

Jeśli wszystkie elementy dane wyjściowe są aktualne, MSBuild pomija obiektu docelowego.To przyrostowe build obiektu docelowego może znacznie zwiększyć prędkość kompilacji.Jeśli tylko niektóre pliki są aktualne, MSBuild wykonuje obiektu docelowego, ale pomija aktualnej pozycji i tym samym przełącza wszystkie elementy aktualne.Jest to znane jako częściowego przyrostowe build.

mapowania 1-1 są zwykle produkowane przez element przekształceń.Aby uzyskać więcej informacji, zobacz Transformacje MSBuild.

Należy wziąć pod uwagę następujące docelowe.

<Target Name="Backup" Inputs="@(Compile)" 
    Outputs="@(Compile->'$(BackupFolder)%(Identity).bak')">
    <Copy SourceFiles="@(Compile)" DestinationFiles=
        "@(Compile->'$(BackupFolder)%(Identity).bak')" />
</Target>

Zestaw plików reprezentowanych przez Compile typu towaru są kopiowane do katalogu kopii zapasowych.Pliki kopii zapasowej mają rozszerzenie nazwy pliku .bak.Jeśli pliki są reprezentowane przez Compile typu towaru lub odpowiadające im pliki kopii zapasowej nie usunięte lub zmodyfikowane po uruchomieniu docelowy kopii zapasowej, a następnie docelowy kopii zapasowej jest pomijane w kolejnych operacji budowania.

Wnioskowanie danych wyjściowych

Porównuje MSBuild Inputs i Outputs atrybuty obiektu docelowego, aby ustalić, czy obiekt docelowy ma wykonać.W idealnej sytuacji zestawu plików, który występuje po zakończeniu kompilacji przyrostowe powinien pozostać taki sam niezależnie od tego, czy cele związane są wykonywane.Ponieważ właściwości i elementy utworzone lub zmodyfikowane przez zadania może mieć wpływ na budowanie, MSBuild musi rozpoznać ich wartości, nawet, jeśli pominięto docelowych, które ich dotyczą.Jest to znane jako danych wyjściowych wnioskowanie.

Istnieją trzy przypadki:

  • Obiekt docelowy ma Condition atrybut, którego wynikiem jest false.W tym przypadku obiekt docelowy nie jest uruchomiony i nie ma wpływu na budowanie.

  • Obiekt docelowy ma nieaktualne dane wyjściowe i jest wykonywany w celu dostosowania ich aktualne.

  • Obiekt docelowy ma nie wyjść nieaktualne i jest pomijane.Program MSBuild ocenia obiektu docelowego i wprowadza zmiany do elementów i właściwości tak, jakby obiekt docelowy zostałoby uruchomione.

Aby obsługiwać kompilację przyrostową, zadania musi zapewnić, że TaskParameter wartość atrybutu Output elementu jest równy parametr wejściowy zadania.Oto kilka przykładów:

<CreateProperty Value="123">
    <Output PropertyName="Easy" TaskParameter="Value" />
</CreateProperty>

Spowoduje to utworzenie właściwości Easy, który ma wartość "123", czy obiekt docelowy jest wykonywane lub pominięte.

<CreateItem Include="a.cs;b.cs">
    <Output ItemName="Simple" TaskParameter="Include" />
</CreateItem>

Spowoduje to utworzenie typu element prosty, który ma dwie pozycje, "a.cs" i "b.cs", czy obiekt docelowy jest wykonywane lub pominięte.

W ppkt 3.5 MSBuild wnioskowanie wyjście jest wykonywane automatycznie na element i właściwości grupy w docelowej.CreateItemzadania nie są wymagane w celu i należy unikać.Ponadto CreateProperty zadań należy przyjąć w celu tylko do określenia, czy element docelowy został wykonany.

Określanie, czy element docelowy został uruchomiony

Ze względu na wnioskowanie danych wyjściowych, należy dodać CreateProperty zadanie do obiektu docelowego do zbadania właściwości i elementy, dzięki czemu można określić, czy obiekt docelowy został wykonany.Dodaj CreateProperty zadań z obiektem docelowym i nadać jej Output element którego TaskParameter jest "ValueSetByTask".

<CreateProperty Value="true">
    <Output TaskParameter="ValueSetByTask" PropertyName="CompileRan" />
</CreateProperty>

To utworzenie właściwości CompileRan i nadaje mu wartość true, ale tylko wtedy, gdy obiekt docelowy jest wykonywany.Jeśli obiekt docelowy jest pominięta, CompileRan nie jest tworzony.

Zobacz też

Koncepcje

Cele programu MSBuild