J'ai vu cela dans un fichier 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 dans 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 actuel doit être lié au projet référencé) sauf Private
, et la page Éléments de projet communs MSBuild ne le fait pas t documentez cette valeur. (Il y a un Private
paramètre documenté Reference
plutôt que ProjectReference
- mais il a Never
, Always
, et les PreserveNewest
paramètres, pas vrai et faux)
Que fait ce paramètre?
visual-studio
msbuild
Billy ONeal
la source
la source
ProjectReference
élément est reconnu par (au moins) l'infrastructure de prise en charge de C # et C ++ MSBuild; il semble qu'il est principalement géré dans leMicrosoft.Common.CurrentVersion.targets
fichier.Réponses:
La
Private
balise conserve le remplacement de l'utilisateur dans la case à cocher «Copier local» dans le dossier Références Visual Studio. Cela contrôle si la référence est utilisée à partir du GAC ou si elle copiera 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 du commentaire dansMicrosoft.Common.CurrentVersion.targets:1742
lequel il est appliqué:Ceci est documenté dans MSDN> Éléments de projet MSBuild communs , et est évident à partir du comportement et du commentaire dans
Microsoft.Common.CurrentVersion.targets:1742
lequel il est appliqué:la source
<Private>
est manquant, alors ce n'est pas équivalent àTrue
. Recherchez "MSBuild CopyLocal bug". Par exemple, voir stackoverflow.com/questions/1132243msbuild\Reference.cs:949
<Private>
est défini surTrue
, MSBuild n'inclut toujours pas la référence dans la sortie si elle n'est pas utilisée par l'application? C'est le comportement actuel que je reçois localement ...Je veux simplement dire que
<Private>false</Private>
(que vous pouvez appliquer àProjectReference
s) peut ne pas fonctionner lors de l' utilisation<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="$(_MSBuildProperties)" />
et du projet$(MSBuildProjectFullPath)
A desProjectReference
s qui ont<None><CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory></None>
. J'ai lu le code source autour de https://github.com/dotnet/sdk/blob/master/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets et j'ai trouvé la solution. Vous devez définir_GetChildProjectCopyToPublishDirectoryItems=false
un exemple serait:<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="TargetFramework=$(TargetFramework);_GetChildProjectCopyToPublishDirectoryItems=false" />
la source