Vi esto en un archivo de proyecto el otro día:
<ProjectReference Include="Foo\Bar\Baz.csproj">
<Project>{A GUID HERE}</Project>
<Name>Baz</Name>
<Private>False</Private> <!-- ??? -->
<ReferenceOutputAssembly>False</ReferenceOutputAssembly>
</ProjectReference>
Cada nodo en un ProjectReference
parece ser autoexplicativo (el archivo del proyecto al que se hace referencia, el GUID, el nombre que se muestra en el explorador de soluciones y si el proyecto actual debe vincularse al proyecto al que se hace referencia) excepto Private
, y la página Elementos comunes del proyecto de MSBuild no lo hace. t documente este valor. (Hay una Private
configuración documentado para Reference
en lugar de ProjectReference
- pero tiene Never
, Always
y PreserveNewest
los ajustes, no verdaderos y falsos)
¿Qué hace esta configuración?
visual-studio
msbuild
Billy ONeal
fuente
fuente
ProjectReference
elemento es reconocido por (al menos) la infraestructura de soporte de C # y C ++ MSBuild; parece que se maneja principalmente en elMicrosoft.Common.CurrentVersion.targets
archivo.Respuestas:
La
Private
etiqueta mantiene la anulación del usuario en la casilla de verificación "Copiar local" en la carpeta Referencias de Visual Studio. Esto controla si la referencia se usa desde el GAC o si copiará el ensamblado al que se hace referencia en el directorio de compilación.Si bien no puedo encontrar ninguna documentación de MSDN a este efecto (quelle sorpresa), es evidente por el comportamiento y por el comentarioMicrosoft.Common.CurrentVersion.targets:1742
donde se aplica:Esto se documenta en MSDN> Elementos comunes del proyecto de MSBuild , y es evidente a partir del comportamiento y del comentario en el lugar
Microsoft.Common.CurrentVersion.targets:1742
donde se aplica:fuente
<Private>
falta, no es equivalente aTrue
. Busque "Error de CopyLocal de MSBuild". Por ejemplo, consulte stackoverflow.com/questions/1132243msbuild\Reference.cs:949
<Private>
está configurado enTrue
, MSBuild todavía no incluye la referencia en la salida si no la utiliza la aplicación? Este es el comportamiento actual que estoy obteniendo localmente ...Solo quiero decir, que
<Private>false</Private>
(que puede aplicar a losProjectReference
s) puede no funcionar cuando se usan<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="$(_MSBuildProperties)" />
y el proyecto$(MSBuildProjectFullPath)
tieneProjectReference
s que tienen<None><CopyToPublishDirectory>PreserveNewest</CopyToPublishDirectory></None>
. Leí el código fuente de https://github.com/dotnet/sdk/blob/master/src/Tasks/Microsoft.NET.Build.Tasks/targets/Microsoft.NET.Publish.targets y encontré la solución. Necesita definir_GetChildProjectCopyToPublishDirectoryItems=false
por lo que un ejemplo sería:<MSBuild Projects="$(MSBuildProjectFullPath)" Targets="Publish" Properties="TargetFramework=$(TargetFramework);_GetChildProjectCopyToPublishDirectoryItems=false" />
fuente