Resumen:Cuándo usar <ProjectReference> en archivos de proyecto?
proyectos de la estructura con el fin de malo en Visual Studio y logró C++ y C# proyectos
Descripción:
Tengo una (más de 100 proyectos) archivo de solución masiva que se está construyendo algunos proyectos en el orden incorrecto El archivo de solución contiene los siguientes tipos de proyectos:
- nativo de C/C++
- de C++
- de C#
La solución contiene todas las dependencias apropiadas entre los diferentes tipos de proyectos. Ok, entonces cuando construyo desde la línea de comando (usando MSBuild), hay un problema. Las dependencias para los proyectos administrados (tanto C++ como C#) se crean en el orden incorrecto. Por ejemplo, un proyecto no se compilará porque falta una dependencia gestionada. Por ejemplo, un archivo gestionado C++ tendrá un uso declaración de que se producirá un error:
#using <foo.dll>
desde foo.dll no existe todavía.
Lo que significa que foo.dll debería haber sido construido antes, pero no lo era. Como mencioné anteriormente, las dependencias están configuradas correctamente en el archivo de solución. Por ejemplo, si foo depende de Baz, tengo esto en el archivo de solución ...
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "Foo", "...\Foo.vcxproj", "{5A42640E-9E0A-442B-8A40-AA91AD5444AC}"
ProjectSection(ProjectDependencies) = postProject
...
{2CE32AE0-B129-40BA-B06E-A628FA149AB3} = {2CE32AE0-B129-40BA-B06E-A628FA149AB3}
EndProjectSection
EndProject
...
Project("{C4ABA494-43D0-400A-9917-20E167A12CFD}") = "baz", "...\baz.csproj", "{2CE32AE0-B129-40BA-B06E-A628FA149AB3}"
ProjectSection(ProjectDependencies) = postProject
...
EndProjectSection
EndProject
Así que el archivo de solución tiene correctamente la dependencia. Pero la dependencia en el proyecto Foo.vcxproj solo se expresa mediante la directiva #using. He leído en el blog de Visual Studio que hay un error conocido al ordenar proyectos en msbuild. http://blogs.msdn.com/b/visualstudio/archive/2010/12/21/incorrect-solution-build-ordering-when-using-msbuild-exe.aspx
Su solución es añadir un elemento llamado a mis proyectos, como este:
<ProjectReference Include="... foo.csproj">
<ReferenceOutputAssembly>false</ReferenceOutputAssembly>
</ProjectReference>
De todas formas, mi pregunta es: necesito para hacer esto sólo para mis proyectos de C++? ¿O lo hago para proyectos Managed C++ AND C#? (Creo que no necesito hacer esto para proyectos de C# ya que sus dependencias son explícitas)
Nota: He intentado poner esto en TODOS los proyectos de mi compilación, y no funcionó tan bien, como obtuve muchos errores de compilación extraños en mis proyectos nativos ...
Gracias por cualquier respuesta a esto.
Descubrí que si agrego un elemento ProjectReference para vincular a una biblioteca nativa, creo errores en el interior de los scripts de MSBuild. Así que he comenzado añadiendo ProjectReference, a otros archivos .csproj, para todos mis proyectos de C++ administrados. Ahora los agregaré a mis archivos .csproj y veré cómo funcionan. –