Pregunta Cómo establecer la ruta de salida de varios proyectos visuales de C #


Tengo una solución que contiene varios proyectos de c # y me gustaría poder establecer la ruta de salida y otras propiedades en todos los proyectos en un solo lugar. Las hojas de propiedades (vsprops) no parecen estar disponibles para los proyectos C # y la variable $ (SolutionDir) se ignora. ¿Hay algún otro método para establecer propiedades en varios proyectos de C #?

Actualizar Al seguir la información en la respuesta de Bas Bossink, pude establecer la ruta de salida de varios proyectos creando un csproj común e importándolo al proyecto individual. Algunos otros puntos:

  • Al construir en Visual Studio si se realizan cambios en el proyecto común, es necesario tocar / volver a cargar cualquier proyecto que haga referencia a él para que se recojan los cambios.
  • Cualquier propiedad que también se establece en un proyecto individual anulará las propiedades comunes.
  • Establecer $ (SolutionDir) como ruta de salida a través de la interfaz de usuario de Visual Studio no funciona como se espera porque el valor se trata como un literal de cadena en lugar de expandirse. Sin embargo, establecer $ (SolutionDir) directamente en el archivo csproj con un editor de texto funciona como se esperaba.

32
2018-03-07 07:02


origen


Respuestas:


Un archivo csproj ya es un archivo msbuild, esto significa que los archivos csproj también pueden usar un elemento de importación como se describe aquí. El elemento de importación es exactamente lo que necesita Puede crear Common.proj que contenga algo como:

<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="3.5"xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<PropertyGroup>
    <OutputPath>$(SolutionDir)output</OutputPath>
    <WarningLevel>4</WarningLevel>
    <UseVSHostingProcess>false</UseVSHostingProcess>
    <TreatWarningsAsErrors>true</TreatWarningsAsErrors>
</PropertyGroup>
</Project>

Puede importar este Common.proj en cada uno de sus csprojs, por ejemplo, así:

<Import Project="..\Common.proj" />

La instrucción de importación debe preceder a cualquier tarea que dependa de las propiedades definidas en Common.proj

Espero que esto ayude. No puedo confirmar sus problemas con la variable $ (SolutionDir). Lo he usado muchas veces. Sin embargo, sé que esta variable no se establece cuando ejecuta un comando msbuild a través de la línea de comando en un proyecto específico que está contenido en una solución. Se establecerá cuando genere su solución en Visual Studio.


36
2018-03-07 20:58



Lamentablemente, estos bits de información, como la ruta de salida, están almacenados dentro de los archivos * .csproj individuales. Si desea actualizar por lotes un montón de ellos, tendrá que volver a utilizar algún tipo de herramienta de actualización de texto o crear un script para tocar cada uno de esos archivos.

Para cosas como esta (aplicar cambios a un grupo de archivos de texto a la vez) Yo personalmente uso WildEdit por Helios Software - funciona como un encanto y tiene un precio razonable.

Pero estoy seguro de que hay toneladas de alternativas gratuitas, también.


1
2018-03-07 08:42



Le sugiero que use una herramienta de compilación como MSBuild o NAnt que le daría más flexibilidad en sus compilaciones. Básicamente, la idea es iniciar una compilación usando (en la mayoría de los casos) un solo archivo de compilación configurable.

Yo personalmente recomendaría NAnt.

Puede encontrar un excelente tutorial sobre NAnt en el blog de JP Boodhoo aquí 


0
2018-03-07 07:10



Selecciona el $(OutputPath) propiedad en una hoja de propiedad común. A continuación, elimine esa entrada en todos los archivos de proyecto que desee que afecte. Luego importe esa hoja de propiedades en todos sus proyectos.

Para cientos de proyectos que pueden ser muy tediosos. Por eso escribí una herramienta para ayudar con esto:

https://github.com/chris1248/MsbuildRefactor


0
2018-03-19 17:29