web-dev-qa-db-fra.com

Que fait le paramètre Privé sur un ProjectReference dans un fichier de projet MSBuild?

J'ai vu cela dans un dossier de projet l'autre jour:

<ProjectReference Include="Foo\Bar\Baz.csproj">
    <Project>{A GUID HERE}</Project>
    <Name>Baz</Name>
    <Private>False</Private> <!-- ??? -->
    <ReferenceOutputAssembly>False</ReferenceOutputAssembly>
</ProjectReference>

Chaque nœud d'un ProjectReference semble être explicite (le fichier de projet référencé, le GUID, le nom à afficher dans l'explorateur de solutions et si le projet en cours doit être lié au projet référencé) sauf Private et la page Eléments communs du projet MSBuild ne documente pas cette valeur. (Il existe un paramètre Private documenté pour Reference plutôt que ProjectReference - mais il a Never, Always et PreserveNewest paramètres, pas vrai et faux)

Que fait ce réglage?

92
Billy ONeal

La balise Private conserve la substitution d'utilisateur à la case à cocher "Copier local" dans le dossier Références de Visual Studio. Ceci contrôle si la référence est utilisée depuis le GAC ou si elle va copier l'assembly référencé dans le répertoire de construction.

Bien que je ne trouve aucune documentation MSDN à cet effet (quelle surprise), cela ressort clairement du comportement et à partir du commentaire dans Microsoft.Common.CurrentVersion.targets:1742 où il est appliqué:

Ceci est documenté dans MSDN> Articles de projet MSBuild communs , et est évident dans le comportement et dans le commentaire dans Microsoft.Common.CurrentVersion.targets:1742 où il est appliqué:

  <!--
    ============================================================

                                        ResolveAssemblyReferences

    Given the list of assemblies, find the closure of all assemblies that they depend on. These are
    what we need to copy to the output directory.

        [IN]
        @(Reference) - List of Assembly references as fusion names.
        @(_ResolvedProjectReferencePaths) - List of project references produced by projects that this project depends on.

            The 'Private' attribute on the reference corresponds to the Copy Local flag in IDE.
            The 'Private' flag can have three possible values:
                - 'True' means the reference should be Copied Local
                - 'False' means the reference should not be Copied Local
                - [Missing] means this task will decide whether to treat this reference as CopyLocal or not.

        [OUT]
        @(ReferencePath) - Paths to resolved primary files.
        @(ReferenceDependencyPaths) - Paths to resolved dependency files.
        @(_ReferenceRelatedPaths) - Paths to .xmls and .pdbs.
        @(ReferenceSatellitePaths) - Paths to satellites.
        @(_ReferenceSerializationAssemblyPaths) - Paths to XML serialization assemblies created by sgen.
        @(_ReferenceScatterPaths) - Paths to scatter files.
        @(ReferenceCopyLocalPaths) - Paths to files that should be copied to the local directory.
    ============================================================
    -->
106
Mitch