2013-03-05 18 views
5

Mam rozwiązanie w Visual Studio, w którym mam współdzielony arkusz właściwości, który zawiera polecenie zdarzenia po kompilacji (bar), które musi wykonać dla każdego projektu.Odziedzicz post-Build-Event w Visual Studio?

Foo.props> Wspólne Właściwości> Budowanie Imprezy> Post-Event budowy> Command Line = bar

Jak następnie określić dodatkowy projekt specyficzne Post-Budowanie wydarzeń? Zwykle brakuje "Dziedzicz z nadrzędnego lub domyślnego projektu" i raczej nie musiałbym ręcznie dodawać bar do każdego projektu, ponieważ utrudnia to utrzymanie.

Odpowiedz

2

Na podstawie tego post, nie wydaje się możliwe. Opublikowałeś swoje pytanie jakiś czas temu; czy udało ci się znaleźć realną alternatywę?


Zmieniano po informacji zwrotnej: Potencjalnie niechlujny alternatywą byłoby zdefiniować polecenia jako makro:

<!-- CommandX.props --> 
<PropertyGroup> 
    <CommandX>bar</CommandX> 
</PropertyGroup> 

Następnie można dodać $(CommandX) do polecenia po kompilacji projektu lub do innego arkusz właściwości. Jeśli nie istnieje $(CommandX), jest on cicho ignorowany.

Po dodaniu tego makra do innego arkusza właściwości, wówczas trzeba by ImportCommandX arkusz właściwości, tak aby $(CommandX) dziedziczy wartość:

<!-- Some-Other-Property-Sheet.props --> 
<ImportGroup Label="PropertySheets"> 
    <Import Project="CommandX.props" /> 
</ImportGroup> 

Po zapoznaniu się nieco więcej o budowie proces, chciałbym polecić używanie MSBuild tasks; w szczególności, Exec task może zaoferować najbardziej realistyczne rozwiązanie.

+0

Nie, uciekam się do ręcznego utrzymania każdego projektu osobno, zgodnie z moim pytaniem. Jedynym rozwiązaniem, które myślałem (ale nie próbowałem implementować) jest projektowanie mojej własnej struktury dziedziczenia za pomocą skryptów - każdy projekt wywołuje ten sam skrypt co zdarzenie post-build, ale przekazuje nazwę projektu jako zmienną i ma skrypt w razie potrzeby uruchom dodatkowe polecenia. Clunky, ale przynajmniej zmniejsza konserwację do jednego pliku. – JBentley

+0

Alternatywnie, każdy projekt powinien wywoływać własny skrypt (za pomocą wbudowanych makr MSVC wywołać skrypt z lokalizacji zależnej od projektu) i mieć rekurencyjnie wywoływać skrypt (y) z projektu (ów), z którego dziedziczą. Głównym problemem obu tych podejść jest to, że sama struktura dziedziczenia musi być aktualizowana w dwóch miejscach (arkusze właściwości i skrypty), w przeciwnym razie nie będą one zsynchronizowane. – JBentley

13

Po znalezieniu tego rozwiązania i przejrzeniu drugiego postu. Nie mogłem zrozumieć, dlaczego zespół VC++ opuścił tę funkcję.

Po przejrzeniu makr dla stron właściwości można dołączyć polecenie z poprzednich właściwości przy użyciu zmiennej% (Command) makro/środowiska. Działa to dla wszystkich zdarzeń kompilacji.

PropertySheet1.props

copy some.dll $(OutputPath) 
%(Command) 

PropertySheet2.props

copy other.dll $(OutputPath) 
%(Command) 

wyniki we wszystkich poleceń wykonywane.

+0

To działa idealnie. Dzięki za to! – Bklyn

0

Ponieważ niektóre zdarzenia po kompilacji nie dziedziczyły z arkusza właściwości, w którym zostały zdefiniowane, zakwestionowałem kaczkę i wylądowałem tutaj.

mam dobrą wiadomość: Od Visual Studio 2013, Pre-Budowa i pokompilacyjnych wiersze polecenia wydarzenie mieć „Dziedziczy z dominujących lub projektu domyślnych” opcja, która dodaje wszystkie zdarzenia z zakładek.

(Testowane z Visual Studio 2013 i 2017 Professional)