Użycie tej samej wartości docelowej w wielu plikach projektów
Jeśli utworzono kilka plików projektu MSBuild, być może okazało się, że musisz użyć tych samych zadań i obiektów docelowych w różnych plikach projektu. Zamiast zawierać pełny opis tych zadań lub obiektów docelowych w każdym pliku projektu, można zapisać element docelowy w osobnym pliku projektu, a następnie zaimportować ten projekt do dowolnego innego projektu, który musi używać obiektu docelowego.
Korzystanie z elementu Import
Element Import
służy do wstawiania jednego pliku projektu do innego pliku projektu. Importowany plik projektu musi być prawidłowym plikiem projektu MSBuild i zawiera poprawnie sformułowany kod XML. Atrybut Project
określa ścieżkę do zaimportowanych plików projektu. Aby uzyskać więcej informacji na Import
temat elementu, zobacz Import, element (MSBuild).
Aby zaimportować projekt
Zdefiniuj we zaimportowaniu pliku projektu wszystkie właściwości i elementy, które są używane jako parametry właściwości i elementów w zaimportowanych projektach.
Import
Za pomocą elementu zaimportuj projekt. Na przykład:<Import Project="MyCommon.targets"/>
Zgodnie z elementem zdefiniuj
Import
wszystkie właściwości i elementy, które muszą zastąpić domyślne definicje właściwości i elementów w zaimportowanych projektach.
Kolejność obliczania
Gdy program MSBuild osiągnie Import
element, zaimportowany projekt jest skutecznie wstawiany do projektu importu w lokalizacji Import
elementu. W związku z tym lokalizacja Import
elementu może mieć wpływ na wartości właściwości i elementów. Ważne jest, aby zrozumieć właściwości i elementy ustawione przez zaimportowany projekt oraz właściwości i elementy używane przez zaimportowany projekt.
Gdy projekt zostanie skompilowany, wszystkie właściwości zostaną najpierw ocenione, a następnie elementy. Na przykład następujący kod XML definiuje zaimportowany plik projektu MyCommon.targets:
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyCommon</Name>
</PropertyGroup>
<Target Name="Go">
<Message Text="Name=$(Name)"/>
</Target>
</Project>
Poniższy kod XML definiuje plik MyApp.proj, który importuje obiekty MyCommon.targets:
<Project
DefaultTargets="Go"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Name>MyApp</Name>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>
Po skompilowania projektu zostanie wyświetlony następujący komunikat:
Name="MyCommon"
Ponieważ projekt jest importowany po zdefiniowaniu właściwości Name
w pliku MyApp.proj, definicja Name
elementu w pliku MyCommon.targets zastępuje definicję w pliku MyApp.proj. Jeśli projekt zostanie zaimportowany przed zdefiniowaną właściwością Name, kompilacja wyświetli następujący komunikat:
Name="MyApp"
Podczas importowania projektów należy użyć następującego podejścia
Zdefiniuj w pliku projektu wszystkie właściwości i elementy, które są używane jako parametry właściwości i elementów w zaimportowanych projektach.
Zaimportuj projekt.
Zdefiniuj w pliku projektu wszystkie właściwości i elementy, które muszą zastąpić domyślne definicje właściwości i elementów w importowanym projekcie.
Przykład 1
Poniższy przykład kodu przedstawia plik MyCommon.targets importujący drugi przykład kodu. Plik targets ocenia właściwości z projektu importowania w celu skonfigurowania kompilacji.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor Condition="'$(Flavor)'==''">DEBUG</Flavor>
<Optimize Condition="'$(Flavor)'=='RETAIL'">yes</Optimize>
<appname>$(MSBuildProjectName)</appname>
<PropertyGroup>
<Target Name="Build">
<Csc Sources="hello.cs"
Optimize="$(Optimize)"
OutputAssembly="$(appname).exe"/>
</Target>
</Project>
Przykład 2
Poniższy przykładowy kod importuje plik MyCommon.targets .
<Project DefaultTargets="Build"
xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
<Flavor>RETAIL</Flavor>
</PropertyGroup>
<Import Project="MyCommon.targets"/>
</Project>