c# publish application with different settings

4 views
Skip to first unread message

sergio boudy

unread,
Jan 25, 2017, 1:41:33 PM1/25/17
to improve-...@googlegroups.com
Hola a grupo,

Estoy trabajando en un projecto en C# Windows Form con SQL.
Este projecto debe correr en diferentes localizaciones con difentes SQL servers. Es decir existe algua forma de cuando yo le de publich en el Visual Studio me copie el programa en diferentes folders y con diferentes connectionString ?

  alguna sugerencia?
Saludos

Darién García Nieves

unread,
Jan 25, 2017, 1:49:09 PM1/25/17
to improve-...@googlegroups.com
Puedes usar un nugget que se llama CodeAssasin.ConfigTransform para hacer los transforms necesarios en tu app.config para cada ambiente. En cuanto a tu approach para el deploymentm hay varias variantes. Desde las más simples como hacer un script en powershell y ponerlo como un post build event, hasta hacerte tu propio installer con Wix, por ejemplo.

Saludos

--

---
Has recibido este mensaje porque estás suscrito al grupo "Improve your code" de Grupos de Google.
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a improve-your-code+unsubscribe@googlegroups.com.
Para acceder a más opciones, visita https://groups.google.com/d/optout.

sergio boudy

unread,
Jan 25, 2017, 5:10:04 PM1/25/17
to improve-...@googlegroups.com
perfecto,
ya mismo las miro.

gracias

Carlos A. Osoria

unread,
Jan 31, 2017, 11:15:11 AM1/31/17
to improve-...@googlegroups.com
Hola Sergio 

Hace ya algun tiempo trabaje en un projecto donde teniamos un problema parecido y la forma en que resolvimos el problema fue agregando una clase al projecto cuya responsabilidad era proveer a la applicacion con el connection string correcto le llamamos ConnectionStringProvider esta clase tenia varios metodos que listo a continuacion pero el mas importante era el metodo "string GetDefaultConnectionString()" que retornaba el connection string de acuerdo a un patron en cascada que definimos. 

Basicamente esta clase retornaba el connection string mas especifico que estuviera disponible y el orden en que buscaba es [USER, HOST, ENVIRONMENT, DEFAULT] esto nos resolvio el problema y permitia tener un solo instalador y un solo fichero de configuracion. 

Este mismo concepto lo use despues en un escenario parecido pero donde el ConnectionStringProvider era capaz de encontrar su configuracion dependiendo de la configuration de red local donde se encontraba. 


Aca te dejo un link con un ejemplo:  

el fichero de configuracion con los connection strings lo enlazabamos con el fichero de configuracion general de la applicacion usando el siguiente tag

<connectionStrings configSource="ConnectionStrings.config" />

y en el fichero ConnectionStrings.config entonces poniamos todos los connection string que deseabamos

<connectionStrings>
<add name="USER_NAME" connectionString="[USER CONNECTION STRING]"/>
<add name="HOST_NAME" connectionString="[HOST CONNECTION STRING]"/>
<add name="ENVIRONMENT_NAME" connectionString="[ENVIRONMENT CONNECTION STRING]"/>
<add name="DEFAULT" connectionString="[DEFAULT CONNECTION STRING]"/>
</connectionStrings>


Saludos 
Carlos


 

Eng. Carlos A. Osoria.
carlos...@gmail.com

sergio boudy

unread,
Jan 31, 2017, 11:41:41 AM1/31/17
to improve-...@googlegroups.com
Hola Carlos,
esta solucion esta perfecta, solo tengo que buscar un share folder donde publicar los updates que todas las pc tengan acceso a el y puedo diferenciar los connection string por el ip las pc. Es decir cada localizacion tiene diferentes ip settings y gateways. 

gracias
Saludos
Sergio

Carlos A. Osoria

unread,
Jan 31, 2017, 12:34:53 PM1/31/17
to improve-...@googlegroups.com
Hola Sergio ...

Si vas a tomar la ruta de la configuration basado en la red, entonces investiga si se cumple que todas las pc una misma subnet tiene el mismo connection string, de ser asi entonces puedes usar el ip address y el subnet mask para encontrar la configuracion, asi reduces el numero entradas en el fichero de configuracion.


Lo otro que me viene a la mente es que cuando mencionas "share folder ... que todas las PC tenga acceso" ... al parecer todas las pc pueden accesar un recurso compartido en la red y si es este el caso, me pregunto si todas pueden llegar a un sql server especifico. Si se cumple lo anterior entonces me parece que modelo o patron de "enterprise configuration variables" quizas sea mucho mejor, mas versatil y menos dolor de cabeza que la solucion que antes sugeri. 

Si todas las PC en la red pueden llegar a un mismo sql server entonces quizas sea mejor tener una sola connection string que apunta a ese sql server instance y alli tener una base de datos que contiene la configuracion no solo donde encontrar los otros sql server pero tambien otras variables de configuracion que applican a nivel empresarial. 

Si lo anterior no aplica entonces no te preocupes

Saludos
Carlos


sergio boudy

unread,
Feb 15, 2017, 12:11:19 PM2/15/17
to improve-...@googlegroups.com
Hola Carlos,
Disculpa la demora, afortunadamete logre que me aprobaran publicar el DB en el Data center de la compannia. Ya no tengo que tener diferentes DBs y connectionstrings.
Tienes alguna idea de como acceder al: Control Panel\User Accounts\Credential Manager?

la aplicacion que estoy haciendo almacena un grupo de remote apps que acceden a un server: "/generic:TERMSRV/server.com".

corriendo este comando: "rundll32.exe keymgr.dll,KRShowKeyMgr" veo las generic credentials, pero no logro acceder a ellas desde c#.


Saludos

Carlos A. Osoria

unread,
Feb 15, 2017, 2:00:55 PM2/15/17
to improve-...@googlegroups.com
Hello Sergio 

Me alegra saber que te han dado permiso para simplificar tu solucion, no siempre es asi ;) 

Nunca he usado el credential manager desde codigo las pocas veces que lo use fue desde el UI the windows con al mouse ...

Aca te dejo algunas opciones que puedes mirar ...

Powershell 
WMI 
Windows Native APIs


Hechale un vistazo a lo que dicen en este post the stackoverflow...


Saludos
Carlos




sergio boudy

unread,
Feb 15, 2017, 2:19:48 PM2/15/17
to improve-...@googlegroups.com
Perfecto Carlos,
Ya mismo las miro, 

Gracias

sergio boudy

unread,
Feb 15, 2017, 3:21:49 PM2/15/17
to improve-...@googlegroups.com
Hola Carlos,
Eres el mejor, C# tiene este paquete: Meziantou.Framework.Security.CredentialManager.

IReadOnlyList<Meziantou.Framework.Security.Credential> CrList= Meziantou.Framework.Security.CredentialManager.EnumerateCrendentials();

de esta forma me da el listado de credentials de la computadora. Busco el que quiero y listo

Muchas gracias.
Saludos

Carlos A. Osoria

unread,
Feb 15, 2017, 5:01:52 PM2/15/17
to improve-...@googlegroups.com
Oh !!! 

Que bien, con este paquete la solucion a tu problema es mucho mas simple. 


y ... de nada, aca estamos para apoyarnos mutuamente.


Saludos
Carlos 

Israel García

unread,
Feb 15, 2017, 5:37:34 PM2/15/17
to improve-...@googlegroups.com
Hey Carlos

Me gusta esa variante; yo he usado un servicio de configuración, estilo consul.io, en ves de una base de datos que me diga dónde están las otras bases de datos y lo demás ; por cierto: "enterprise configuration variables", no había oído de ese patrón, tienes algún link que me puedas recomendar sobre esto?

Saludos 

Sent from my iPhone
Para cancelar la suscripción a este grupo y dejar de recibir sus mensajes, envía un correo electrónico a improve-your-c...@googlegroups.com.

Carlos A. Osoria

unread,
Feb 15, 2017, 7:59:05 PM2/15/17
to improve-...@googlegroups.com
Hola Israel 

La verdad es que no recuerdo haber leido sobre "Enterprise Configuration Variables" en ningun articulo especifico lo que recuerdo es que empeze a investigar sobre el tema cuando se me presento un problema parecido al de Sergio con un otro tono.

En aquel entonces estaba trabajando con Windows Workflow Foundation creando una maquinaria de workflows para automatizar flujos aplicados a documentos virtuales, recuerdo que andaba estudiandome los articulos del gran maestro "Roman Kiss", y si mal no recuerdo fue en uno de sus articulos donde menciono el concepto de "Enterprise Configuration Variables" esto me puso a reflexionar sobre este concepto y intente aplicarlo como pude a mi solucion. 

Aca te dejo los articulos que menciono la verdad que no se en cual se menciona el concepto...

Windows Workflow Foundation tiene un concepto super versatil que no habia visto antes y me parecio brillante en aquel entonces "Variable<T>

Aca algo sobre el concepto de Variable<T>...

En principio la idea era como mejorar la experiencia de programacion con este tipo de cosas y si se podria en sin alterar mucho el flujo del codigo introducir el concepto de una variable que en vez de almacenarse en memoria se almacenara digamos en una base de datos o fichero. Esto fue lo que me llevo a investigar sobre el tema.

Un tiempo despues me tope una implementacion del mismo concepto y donde trabajo hoy en dia existe una implementacion a medias del mismo concepto.

Realmente no se si se llama "Enterprise Configuration Variables" pero yo les llamo asi porque generalmente almacenan conceptos de "Configuracion", casi siempre se usan en mas de un sistema y describen conceptos a nivel empresarial "Enterprise" y lo de "Variable" viene porque puedes cambiar el valor cuando gustes.

La conclusion a que he arrivado es que sistemas empresariales de tamaño mediano a grande, con un monton de puntos de configuration e integracion tienden a centralizar y consolidar la configuracion en un solo punto, quizas para que sea mas facil de manejar, quien sabe, no solo eso tambien he notado que tienden a convertir las configuraciones de estaticas a dinamicas de manera tal que pueden afectar las desiciones tomadas por el sistema en tiempo real, imagino que todo esta complicacion es para poder reaccionar de forma mas rapida y agil a los cambios en el mercado y no tener que hacer deployments.

Vaya to esto que escribo aca son mis propias conclusiones luego de observar y imaginarme la evolucion los sistemas con que he trabajado hasta el momento. Quizas estos no son patrones ni nada por el estilo, son solo cosas con que me he encontrado en el camino.


Saludos 
Carlos 

  

Reply all
Reply to author
Forward
0 new messages