¿Cómo evitar la copia de archivos de documentación XML en una compilación en modo de lanzamiento?

82

Tengo un proyecto de Visual Studio 2010 que hace referencia a algunos componentes de terceros. Sus ensamblajes van acompañados de archivos de documentación XML, que son útiles para nosotros (y solo para nosotros) desarrolladores. Y cada vez que se crea el proyecto (ya sea en los modos Debug o Release), estos archivos XML se copian en el directorio de compilación.

Parece que no puedo encontrar una configuración o cambiar para deshabilitar la copia de esos archivos XML en el directorio de compilación, ya sea dentro de Visual Studio o mediante MSBuild. Un script posterior a la compilación puede ser una opción, pero maloliente. ¿Algunas ideas? Gracias.

Humberto
fuente
1
Para que quede claro, agregó una referencia a un ensamblaje en el cuadro de diálogo Agregar referencia. ¿Ahora, cuando construye, los archivos XML doc aparecen en su ruta de salida?
Sayed Ibrahim Hashimi
3
posible duplicado de la copia de archivos XML y PDB de ensamblaje referenciados en la salida
ShawnFeatherly

Respuestas:

112

Cuando crea un proyecto, los archivos .xml / .pdb se recopilan mediante la tarea ResolveAssemblyReference. Cuando se llama a ResolveAssemblyReference, se pasa una lista de extensiones de archivo para archivos relacionados. Esa lista de extensiones de archivo se captura en la propiedad de MSBuild AllowReferenceRelatedFileExtensions . De forma predeterminada, esa lista contendrá ".pdb; .xml".

Si desea excluir todos los archivos de referencia relacionados para que no se recojan, simplemente anule el valor de la propiedad a algo para lo cual los archivos relacionados no tendrán extensiones. Por ejemplo, puede establecer AllowReferenceRelatedFileExtensions en "-".

También puede personalizar la lista de archivos que devuelve. Si solo desea encontrar archivos .pdb, deberá pasar AllowedReferenceRelatedFileExtensions=".pdb". En ese caso, todas las referencias que tengan un archivo .pdb junto al .dll / .exe también se copiarán. También puede usar esto para copiar otros archivos relacionados que pueden no terminar en .pdb / .xml. Por ejemplo, si tiene un ensamblado al que se hace referencia llamado MyAssembly.dll y en esa misma carpeta existe MyAssembly.pdb y MyAssembly.foo Si lo establece AllowedReferenceRelatedFileExtensions=".pdb;.foo", tanto el archivo .pdb como el .foo se copiarán en el directorio de salida.

Sayed Ibrahim Hashimi
fuente
Esta es la respuesta. ¡Muchas gracias!
Humberto
15
Es curioso que haya tardado 2 años en obtener una respuesta a esto.
Sayed Ibrahim Hashimi
Me acabo de dar cuenta de que comenté esto hace 2 años, lo siento por no responder en ese entonces :(
Sayed Ibrahim Hashimi
7
Detalles sobre cómo especificar esto en la línea de comandos de msbuild o en un archivo de proyecto: stackoverflow.com/questions/2011434/…
yzorg
3
¿En qué parte de Visual Studio podemos cambiar AllowedReferenceRelatedFileExtensions?
Apostrofix
0

El archivo de proyecto de Visual Studio tiene el mismo formato que cualquier archivo msbuild. Entonces, puede agregar manualmente la condición en la sección correspondiente para no copiar sus archivos xml si el nombre de la configuración es 'Liberar'.

Debería estar cambiando

<ItemGroup>

a

<ItemGroup Condition="'$(CONFIG)'=='RELEASE'">

o algo como esto.

Alex
fuente
3
Un proyecto de Visual Studio y un archivo de solución SON archivos de MSBuild.
AMissico
@AMissico Incorrecto, los archivos de solución no son archivos de MSBuild.
julealgon
Si bien no están en el formato de archivo de proyecto (XML), siguen siendo un archivo de soporte de MSBuild. Establecer la variable de entorno ( set MSBuildEmitSolution=1o pasar el argumento de propiedad ( p:msbuildemitsolution=1).
AMissico
-4

Si los archivos .xml / .pdb están marcados como "Contenido" de acción de compilación (etc.), puede cambiarlos a "Ninguno". También debe asegurarse de que la copia de salida de la compilación sea falsa .

¿Ambos están listos?

Marc Gravell
fuente
2
Pero para hacer esto, tendría que agregarlos como elementos del proyecto ... ¿o me equivoco?
Humberto
Los archivos .PDB y .XML generados a partir del compilador nunca deben incluirse en un proyecto, ya que terminará con errores de compilación recursivos y bloqueo de archivos.
Jamie Howarth
1
@codegecko, ¿viste el "Ninguno"? que necesitan ser adyacentes a la DLL fuente para obtener IntelliSense etc. He Nunca tuvimos un problema con esto.
Marc Gravell
2
@codegecko ¿quién dijo algo sobre la papelera? No haría referencia desde allí ... Normalmente hago referencia desde a / lib, con dll, XML y pdb.
Marc Gravell
1
Aaaaah, ahora el centavo cayó, lo entendí mal. Incluirlos en una carpeta / lib, hacer referencia dentro de VS, agregar los elementos a una carpeta de solución, especificar el tipo de salida como "Ninguno", lo tengo. De hecho, podría comenzar a usar eso en mis propios proyectos, ¡gracias!
Jamie Howarth
-5

¿Cuál es el problema de que los archivos XML se copien en la carpeta en las versiones de lanzamiento? Me parece que esto está bien y que el problema real está en el código que recoge los archivos para colocarlos en el instalador. Recoger archivos DLL de terceros de su propia carpeta bin \ release no es una buena práctica en mi opinión. Haría que mi instalador recogiera archivos DLL de terceros de su propia carpeta en mi árbol de fuentes.

Russell McClure
fuente
2
El problema es que estos archivos no tienen ninguna función además de ayudar a la función IntelliSense. No tiene sentido incluirlos con los archivos de la versión. Además, no hay instalador involucrado ...
Humberto
Entonces, ¿cómo está implementando su aplicación?
Russell McClure
3
Entonces, mi solución sería modificar el script de copia para no copiar los archivos que no desea copiar.
Russell McClure
2
eso funcionaría seguro. Pero no es la solución ideal , lo que evitaría que los archivos se copien en la compilación. Estoy tratando de entender la lógica detrás de este comportamiento. ¡Gracias!
Humberto
4
Los archivos de documentación XML bien escritos son grandes. Copiarlos en cada compilación está acortando la vida útil de mi SSD.
springy76
-5

La configuración está en las Propiedades del proyecto en cuestión, en la pestaña "Construir", desmarque "Archivo de documentación XML". También es una propiedad de MSBuild llamada <DocumentationFile>en el correspondiente <PropertyGroup>a su configuración de compilación en el archivo. * Proj.

Jamie Howarth
fuente
3
Esta respuesta es inexacta. Pregunta sobre archivos XML pregenerados que provienen de un proveedor de control. Su respuesta solo es útil si está generando sus propios archivos XML.
Kevin Kalitowski
Parece que puede configurar esto en el archivo .csproj en el elemento <PropertyGroup>: <AllowedReferenceRelatedFileExtensions> ".pdb". = "" </AllowedReferenceRelatedFileExtensions>
Jay