2011-02-14 17 views
9

Como parte de nuestro ciclo de vida de desarrollo, tenemos un número de procesos que ejecutamos contra la fuente C# en nuestros proyectos.Agregar información personalizada a archivos CSPROJ

Los procesos se derivan de una GUI que actualmente lee el archivo * .csproj para encontrar los archivos fuente utilizados en el proyecto. Esto funciona bien

Ahora tenemos un nuevo requisito para proporcionar algunos procesos de validación que requieren una llamada a un servicio web. El servicio web debe proporcionarse con algunas credenciales que son específicas del proyecto. Idealmente, podríamos ingresar y almacenar estas credenciales dentro del archivo * .csproj, pero no veo un medio para extenderlo, ¿verdad?

No queremos presentar una nueva configuración. archivo solo para estas configuraciones si podemos ayudarlo. ¿Es posible almacenar información como este es el archivo * .csproj, si no hay otro lugar para ponerlo.

gracias

+0

no utilice los archivos .csproj para configuraciones específicas como credenciales; para obtener credenciales, utilice el archivo web.config (o app.config), ya que las credenciales pueden cambiar con el tiempo. –

+1

@moontear, a menos que, como se indique en el OP, las credenciales no sean para el código, sino más bien para un proceso que "grocks" a través de los proyectos. En ese caso, las credenciales son un aspecto del proyecto, en lugar de la * ejecución * del código en el proyecto. =) – Rob

+0

Rob: tiene razón, el proceso es parte del proceso de desarrollo y, como tal, las credenciales son parte de la "fuente", no tienen nada que ver con la aplicación cuando se está ejecutando. –

Respuesta

10

El archivo .csproj es básicamente un MSBuild file, por lo que puede ampliarlo con valores personalizados. Si hace clic con el botón derecho en un proyecto en Visual Studio y elige "Descargar proyecto", el proyecto se "oscurecerá" y podrá hacer clic derecho de nuevo y seleccionar Edit [ProjectFileName].csproj. A continuación, puede añadir algo similar a lo siguiente:

<PropertyGroup Label="Custom"> 
    <Badger>1</Badger> 
</PropertyGroup> 

Este debe ser persistente cuando se modifica el proyecto (es decir, archivos añadido/borrado) y se puede recuperar los valores del archivo, utilizando el método de su elección.

+1

@BENBUN: es posible que desee ver MSBuild con más detalle, es bastante flexible, por lo que hay buenas posibilidades de que pueda definir un "objetivo" personalizado y haga que MSBuild se encargue de invocar el servicio web, etc., por usted. Automatización FTW; =) – Rob

+0

Muy cerca, el atributo "Etiqueta" no eeem que se le permita, por lo que terminó con: \t \t \t projprojproj \t \t keykeykey \t

+0

@BENBUN, "Etiqueta" como atributo puede ser una cosa VS2010/MSBuild4.0 (si está utilizando una versión anterior?) Como se mostró en intellisense para mí. De cualquier forma, ¡con suerte hará lo que quieras que haga! =) – Rob

1

Sé que descartarlo, pero la más obvia, y probablemente recomendado, el lugar está en el archivo de configuración . Aunque encriptado

Un archivo de configuración por proyecto lo hace para la mayoría de los casos y no es una gran sobrecarga.

+0

Lo siento, soy un poco novato en esta área. Cuando dices "config", ¿te refieres a que creo el mío o hay un proyecto amplio disponible para usar? –

+0

@BENBUN: Creo que se refiere a la web.config –

+0

Hmm - no estoy seguro si/cómo lo uso. Para que quede claro, los servicios web no se usarán en Visual Studio, sino que luego se utilizará otra aplicación completamente independiente. ¿Cómo crearías un archivo web.confog? –

2

Los proyectos de VS admiten "extensiones de proyecto". Estos son datos personalizados almacenados directamente en archivos csproj/vbproj. Puede leerlos y escribirlos fácilmente incluso desde VS. Por ejemplo, la siguiente VS escrituras macro tal configuración personalizada:

Dim proj As Project = DirectCast(DTE.ActiveSolutionProjects(0), Project) 
proj.Globals.VariableValue("MySettingName1") = "My value1" 
proj.Globals.VariablePersists("MySettingName1") = True 

A continuación se lee de nuevo:

proj.Globals.VariableValue("MySettingName1").ToString 

Y el código en el archivo csproj parece:

<ProjectExtensions> 
    <VisualStudio> 
     <UserProperties MySettingName1="My value1" /> 
    </VisualStudio> 
    </ProjectExtensions> 

Por supuesto , esto persiste y no será sobrescrito por VS.

Cuestiones relacionadas