Utworzyłem niestandardowy .targets
plik MSBuild , który umieściłem w projekcie Delphi XE za pośrednictwem IDE i włączyłem go z menu kontekstowego Project Manager. Chociaż plik jest weryfikowany, zawsze zostaje wyłączony po ponownym zapisaniu pliku projektu.
Oto uproszczona wersja pliku docelowego o nazwie Custom.targets
.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Hello">
<Message Text="Hello from custom target"/>
</Target>
</Project>
Jako samodzielny plik działa to zgodnie z oczekiwaniami: wpisywanie ...
MSBuild Custom.target /t:Hello
... w wierszu poleceń wyświetla oczekiwany komunikat.
Dodanie Custom.targets
do projektu Delphi za pośrednictwem IDE wyświetla plik w Menedżerze projektu zgodnie z oczekiwaniami, a .dproj
plik zawiera teraz wiersz ...
<TargetsFile Include="Custom.targets"/>
Kliknąłem plik prawym przyciskiem myszy w menedżerze projektów IDE i wybrałem Enable
. Ale kiedy projekt jest budowany, Build
okno komunikatu wyświetla:
[Ostrzeżenie programu MSBuild] Custom.targets (1): Ignorowanie wyłączonego importu:
PathToProjectSource\\Custom.targets
Ponowne kliknięcie prawym przyciskiem myszy w Menedżerze projektów nadal pokazuje Enable
opcję zamiast oczekiwanej Disable
.
W linii poleceń MSBuild ProjectName.dproj /t:Hello
również nie działa.
Próbowałem zhakować .dproj
plik, aby dodać wiersz ...
<Import Project="Custom.targets"/>
MSBuild ProjectName.dproj /t:Hello
Teraz pisanie działa. Ale następnym razem, gdy zapiszę plik projektu z IDE, <Import>
instrukcja zostanie usunięta.
Czy ktoś ma pojęcie, co się dzieje, proszę?
/t:Hello
jak i ze środowiska IDE za pomocą prawego przycisku myszy w Project Manager - Targets - Hello. DodałemCustom.targets
do projektu, klikając prawym przyciskiem myszy w Menedżerze Projektu - Dodaj - (przeglądając plik). Ścieżka jest tym samym katalogiem, co plik .dproj.Odpowiedzi:
Delphi sam generuje całą zawartość dproj, a ten niestandardowy import będzie zawsze usuwany.
Możesz napisać własne pliki msbuild xml, ale dproj należy do Delphi.
Chyba że masz kod źródłowy lub nie chcesz naprawiać idei, których nie możesz zrobić.
Jeśli naprawdę chcesz elastycznego sposobu XML do budowania projektów delphi i tworzenia wielu celów, wypróbuj want or want vnext (my fork on bitbucket)
źródło
Włączyłbym ręcznie plik docelowy i kompilowałbym zewnętrznie za pomocą MSBuild zamiast z IDE, ponieważ podczas kompilowania z IDE jest trochę bałagan, aby wiedzieć, którą konfigurację i cel zastosowałeś (czy ten, który został kliknięty w projekcie? Lub ten z włączony cel? nie otrzymujesz żadnej wizualnej wskazówki, że cel niestandardowy jest włączony).
Zwykle robię to przed,
Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets"
więc nie pojawią się w IDE (istnieją, ale są ukryte dla programistów).Na przykład moje projekty Delphi XE4 kończą się:
Mój plik .targets definiuje niestandardowe „PropertyGroup” i „Target” z warunkiem, więc będą one stosowane tylko w przypadku wywołania z programu MSBuild:
Następnie skompiluj go z:
Takie podejście pozwala dostosować cele kompilacji, aby upewnić się, że każda aplikacja otrzymuje poprawne ustawienia bez wpływu zmian wprowadzanych przez kogokolwiek.
źródło