14

Tengo un proyecto relativamente simple que está bajo control de fuente (svn), y quería crear un instalador. Sé que podría (debería) usar WiX, pero como soy nuevo en la creación de instaladores, pensé que sería más fácil simplemente usar el Asistente de Instalación y Despliegue incorporado de Visual Studio (2010).¿Cómo puedo hacer que la propiedad SourcePath de un archivo en un proyecto de Instalación y Despliegue de Visual Studio (Windows Installer) sea relativa en lugar de absoluta?

Desafortunadamente, parece que los archivos que incluyen documentación externa (no mantenida por el proyecto), archivos de configuración y "Content" files se agregan con rutas absolutas. Esto, por supuesto, es subóptimo. Busqué en la web, pero encontré solo el same question, sin respuesta. Otro usuario de stackoverflow parece haber pedido similar question, pero la única respuesta, que sugiere ClickOnce, parece fuera de base (me gustaría tener una MSI que distribuyo no una instalación basada en web).

¿Alguien sabe cómo (o si) se puede arreglar esto?

Respuesta

2

Puede ser más fácil ahora, pero cuando empiece a toparse con las limitaciones de la herramienta, va a ser muy difícil. Ni siquiera hablemos de las malas prácticas que fomentará, que podrían terminar siendo muy difíciles para el usuario final que instala su producto. Tienes Visual Studio 2010 así que InstallShield LE (gratis) sería una mejor opción.

De lo contrario, para responder a su pregunta, solo usará rutas absolutas si no puede calcular una ruta relativa. (por ejemplo c: \ foo \ foo.vdproj consumiendo d: \ foo.txt consumiendo c: \ test \ foo.txt debería ser automáticamente .... \ test \ foo.txt)

Por cierto, si usted decide para ver WiX y querer ver algo "fácil" de mi proyecto IsWiX en CodePlex. Estoy tratando de cerrar la brecha de funciones entre InstallShield y WiX.

+0

Todos los archivos están en la misma unidad, dentro de unas pocas ramas de un (grandioso) directorio de abuelos (es decir, directorio principal de 2x a 3x). Y, sin embargo, sigo obteniendo rutas absolutas para rutas relativas que deberían ser fáciles de calcular (por ejemplo, project c: \ solution \ project_a \ project_a.vdproj con el archivo agregado c: \ solution \ project_b \ ReadMe.txt). –

+0

Lo siento, nunca he observado ese comportamiento. Siempre lo he visto comportarse como lo describí anteriormente. De cualquier manera, no tocaría VDPROJ con un polo de 100 '. La vida es demasiado corta. –

+0

Creo que la confusión aquí es que usa la ruta relativa (echa un vistazo al archivo proj) y muestra la ruta absoluta. – tzerb

3

Con VS2005, a veces las rutas de acceso almacenadas en el archivo vdproj eran absolutos, y algunas veces parientes. En mi caso, parecía estar relacionado con si los archivos se accedieron a través de la ruta canónica o no. He aquí un ejemplo concreto:

Fuente está en C: \ Vistas \ builddir, solución abierta C: \ views \ builddir \ solution.sln y añadir archivos de C: \ Vistas \ builddir \ .. y VS2005 añadiría relativa rutas en el archivo vdproj. Sin embargo, si asigna ese builddir a una unidad de carta, por ejemplo, cree un subst desde C: \ Views \ builddir a s :, abra la solución a través de S: \ solution.sln, y luego agregue archivos navegando a S: \ .., VS2005 insertaría rutas absolutas en los archivos vdproj. Si VS2005 mostraba rutas como absolutos o parientes no tenía relación con lo que almacenaba en los archivos vdproj.

Por lo tanto, es posible que el problema se deba a la ruta que está utilizando para abrir esa solución ... la apertura de \\ server \ shareddir \ solution.sln puede tener un comportamiento diferente al de la asignación \\ server \ shareddir a W: y abriendo w: \ solution.sln.

Siempre puede agregar los archivos, luego use un editor de texto (por ejemplo, un bloc de notas) para cambiar las rutas absolutas en el archivo vdproj a las relativas. Estarás bien hasta que cambies ese proyecto de nuevo.

MS parece que no soluciona errores menores como este, sino que reescribe el código para introducir un conjunto completamente diferente de errores, por lo que VS2010 aún podría actuar de esta manera.

Para su información, ¿por qué querría trazar una ruta absoluta a su builddir? Era un vestigio de los viejos tiempos cuando VS no hacía nada correcto con las rutas relativas.

3

Como se mencionó en tzerb, la principal fuente de confusión podría ser que las rutas aparecen como absolutas debajo de la ventana de propiedades dentro de VS, pero cuando se mira en el archivo VDPROJ real debería ver las rutas como relativas. Sin embargo, como mencionó Patbob, creo que las rutas se almacenan como absolutas cuando provienen de una unidad de letra diferente.

Cuestiones relacionadas