Import, element (MSBuild)

Importuje zawartość jednego pliku projektu do innego pliku projektu.

<Importowanie projektu><>

Składnia

<Import Project="ProjectPath"
    Condition="'String A'=='String B'" />

Atrybuty i elementy

W poniższych sekcjach opisano atrybuty, elementy podrzędne i elementy nadrzędne.

Atrybuty

Atrybut opis
Project Atrybut wymagany.

Ścieżka pliku projektu do zaimportowania. Ścieżka może zawierać symbole wieloznaczne. Pasujące pliki są importowane w kolejności sortowania. Korzystając z tej funkcji, można dodać kod do projektu tylko przez dodanie pliku kodu do katalogu.
Condition Atrybut opcjonalny.

Warunek do obliczenia. Aby uzyskać więcej informacji, zobacz Warunki.
Label Atrybut opcjonalny.

Stosuje identyfikator do tego elementu importu.
Sdk Atrybut opcjonalny.

Odwołuje się do zestawu SDK projektu.

Elementy podrzędne

None

Elementy nadrzędne

Element opis
Projekt Wymagany element główny pliku projektu MSBuild.
ImportGroup Zawiera kolekcję Import elementów pogrupowanych w warunku opcjonalnym.

Uwagi

Za pomocą Import elementu można ponownie użyć kodu, który jest wspólny dla wielu plików projektu. Użycie importu ułatwia konserwację kodu, ponieważ wszystkie aktualizacje wprowadzane w udostępnionym kodzie są propagowane do wszystkich projektów, które go importują.

Zgodnie z konwencją udostępnione zaimportowane pliki projektu są zapisywane jako .targets pliki, ale są to standardowe pliki projektu MSBuild. Program MSBuild nie uniemożliwia importowania projektu, który ma inne rozszerzenie nazwy pliku, ale zalecamy użycie .targets rozszerzenia w celu zapewnienia spójności.

Ścieżki względne w importowanych projektach są interpretowane względem katalogu projektu importu (z kilkoma wyjątkami opisanymi w dalszej części tego akapitu). W związku z tym, jeśli plik projektu zostanie zaimportowany do kilku plików projektu w różnych lokalizacjach, ścieżki względne w zaimportowanym pliku projektu będą interpretowane inaczej dla każdego zaimportowanego projektu. Istnieją dwa wyjątki. Jednym z wyjątków jest to, że w Import elementach ścieżka jest zawsze interpretowana względem projektu, który zawiera Import element. Innym wyjątkiem jest to, że UsingTask zawsze interpretuje ścieżkę względną atrybutu AssemblyFile względem pliku, który zawiera UsingTask element.

Wszystkie właściwości zarezerwowane programu MSBuild, które odnoszą się do pliku projektu, do którego odwołuje się importowany projekt (na przykład MSBuildProjectDirectory i MSBuildProjectFile), są przypisywane wartości na podstawie importowanego pliku projektu.

Jeśli importowany projekt nie ma DefaultTargets atrybutu, zaimportowane projekty są sprawdzane w kolejności ich importowania, a wartość pierwszego odnalezionego DefaultTargets atrybutu jest używana. Jeśli na przykład program ProjectA importuje elementy ProjectB i ProjectC (w tej kolejności), a program ProjectB importuje element ProjectD, program MSBuild najpierw wyszukuje DefaultTargets określone w programie ProjectA, następnie ProjectB, ProjectD, a na koniec ProjectC.

Schemat zaimportowanego projektu jest identyczny z schematem projektu standardowego. Mimo że program MSBuild może być w stanie skompilować zaimportowany projekt, jest mało prawdopodobne, ponieważ importowany projekt zazwyczaj nie zawiera informacji o właściwościach do ustawienia lub kolejności uruchamiania obiektów docelowych. Zaimportowany projekt zależy od projektu, do którego jest importowany w celu dostarczenia tych informacji.

Symbole wieloznaczne

W programie .NET Framework 4 program MSBuild zezwala na symbole wieloznaczne w atrybucie Project. Gdy istnieją symbole wieloznaczne, wszystkie znalezione dopasowania są sortowane (w celu odtworzenia), a następnie są importowane w tej kolejności tak, jakby kolejność została jawnie ustawiona.

Jest to przydatne, jeśli chcesz zaoferować punkt rozszerzalności, aby ktoś inny mógł zaimportować plik bez konieczności jawnego dodawania nazwy pliku do pliku importu. W tym celu element Microsoft.Common.Targets zawiera następujący wiersz w górnej części pliku.

<Import Project="$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore\*" Condition="'$(ImportByWildcardBeforeMicrosoftCommonTargets)' == 'true' and exists('$(MSBuildExtensionsPath)\$(MSBuildToolsVersion)\$(MSBuildThisFile)\ImportBefore')"/>

Przykład

W poniższym przykładzie pokazano projekt zawierający kilka elementów i właściwości oraz importuje ogólny plik projektu.

<Project DefaultTargets="Compile"
    xmlns="http://schemas.microsoft.com/developer/msbuild/2003">

    <PropertyGroup>
        <resourcefile>Strings.resx</resourcefile>

        <compiledresources>
            $(O)\$(MSBuildProjectName).Strings.resources
        </compiledresources>
    </PropertyGroup>

    <ItemGroup>
        <CSFile Include="*.cs" />

        <Reference Include="System" />
        <Reference Include="System.Data" />
    </ItemGroup>

    <Import Project="$(CommonLocation)\General.targets" />
</Project>

Zobacz też