2013-03-16 7 views
8

Mam obiekt kompilacji próbuję wykonać w MSBuild. Cel ma kilka wejść i wyjść, które umieściłem tam, aby przyspieszyć czas w przypadku kompilacji pośredniej. Pliki wejściowe zawsze istnieją (pliki nagłówkowe), z drugiej strony wyjścia nie zawsze istnieją (pliki XML).MSBuild: Nieudane wejścia i wyjścia docelowe przy pierwszym wykonaniu

Konstrukcja pośrednia, która prawdopodobnie pomija zadanie, jest dość pożądana, ponieważ jest dość kosztowna pod względem wydajności.

W każdym razie, wejścia i wyjścia działają świetnie IF wyjścia już istnieją. W takim przypadku MSBuild emituje bardzo pomocny komunikat, że cel jest pomijany, ponieważ wszystkie pliki są aktualne.

Jest to przypadek, gdy nie istnieje katalog wyjściowy i pliki (po raz pierwszy, to zadanie zostanie uruchomione), który MSBuild nie powiedzie się z następującym komunikatem:

Pomijanie cel [targetName], ponieważ nie ma wyniki.

Dodanie szczegółowej gadatliwości mówi mi, że powodem jest to, że elementy @ (OutputXML) są puste. Ok, więc co teraz? Nie wydaje się zatem, aby cała koncepcja Pośrednich Budowy w MSBuild była wtedy bardzo solidna.

Moje pytanie brzmi, w jaki sposób mogę uzyskać korzyści z pośredniej kompilacji i nadal mieć ten cel, gdy nie ma wyjść? (Mam nadzieję, że nie muszę uciekać się do pisania moje własne rozszerzenie zadań)

Oto odnośny fragment mojego skryptu build:

<ItemGroup> 
    <Headers Include="..\**\*.h" /> 
    <OutputXML Include="$(OutputDir)\*.xml" /> 
</ItemGroup> 

<Target Name="Doxygen" 
     Inputs="@(Headers)" 
     Outputs="@(OutputXML)" > 
    <Exec ... /> 
</Target> 

Uwaga: Byłem całym google , msdn i ta strona próbują znaleźć odpowiedź i jak dotąd nie udało się. Chociaż znalazłem bardzo pomocne informacje na temat MSBuild w ogóle.

+0

Witaj Chris, niepowiązany z tym wpisem. Kontaktuję się z tobą, aby uzyskać pomoc dotyczącą MSBuild. Jestem nowy w MsBuild i zamierzam generować pliki rozwiązań w locie. Zauważyłem, że w poście SO poniżej wspomniałeś, że masz rozwiązanie czegoś podobnego. Czy mógłbyś podzielić się mną ze mną? Dzięki. http://stackoverflow.com/questions/13300294/can-i-use-msbuild-scripts-to-replace-sln-files – user559788

Odpowiedz

6

A co z używaniem fikcyjnego wydruku?

<ItemGroup> 
<Headers Include="..\**\*.h" /> 
<OutputXML Include="$(OutputDir)\*.xml" /> 
</ItemGroup> 

<ItemGroup Condition="'@(OutputXML)' == ''"> 
<OutputXML Include="$(OutputDir)\dummy.xml" /> 
</ItemGroup> 

<Target Name="Doxygen" 
     Inputs="@(Headers)" 
     Outputs="@(OutputXML)" > 
<Exec ... /> 
</Target> 

Ustawiając OutputDir aby go dummy.xml nie jest już pusta, nawet jeśli plik nie istnieje. Symbol wieloznaczny wskazuje, że wyszukujesz .xml i nie udało ci się go znaleźć, ale nazwanie jednego konkretnego nie spowodowałoby wyszukiwania i nie obchodzi go, czy istnieje.

+0

Działa doskonale. Dzięki, nie wiedziałem, że możesz ponownie zdefiniować ten sam przedmiot ponownie. Ale działa świetnie! –

Powiązane problemy