2011-05-25 9 views
17

En Visual Studio 2010, deseo crear una plantilla de proyecto que incluya los enlaces a dos archivos que deberían existir en el sistema. Uno de ellos es un archivo AssemblyInfo.cs común. Otro es el archivo de clave de nombre fuerte (* .snk).¿Cómo creo una plantilla de proyecto de Visual Studio que incluye archivos vinculados?

Necesito estas referencias para ser relativo, porque el espacio de trabajo de cada desarrollador se configurará de manera diferente. ¿Es posible que la plantilla del proyecto determine de alguna manera dónde residen estos archivos en el entorno de cada desarrollador?

Al leer acerca de las plantillas, parece que son bastante estáticas, así que me pregunto si se pueden hacer trucos para hacer algo como esto. Si nada más, puedo agregar referencias falsas que causarán errores de compilación y forzarán al desarrollador a enganchar estos archivos. Pero si puedo hacerlo por ellos, sería mejor.

+0

¿Alguna vez encontró una solución a esto? –

Respuesta

1

Puede intentar integrar un asistente en su plantilla de proyecto y establecer las rutas a los archivos vinculados. Si recuerdo bien, no es necesario crear una interfaz de usuario; solo tiene que especificar los reemplazos correctos en replacementsDictionary y VS reemplazará los valores en su archivo de plantilla. Consulte this o this para obtener más información.

2

Microsoft ha confirmado que este es un error con el modelo de extensibilidad y las plantillas de proyectos. Logré solucionar esto usando IWizard. He añadido el código siguiente en el método RunFinished de mi aplicación IWizard:

//Get linked file directory 
    string coreDir = Path.GetDirectoryName(MyProject.FullName); 

    //Data folder 
    ProjectItem propertiesProjectItem = slSharedProject.ProjectItems.Cast<ProjectItem>().Where(p => p.Name == "Data").First(); 
    propertiesProjectItem.ProjectItems.AddFromFile(coreDir + @"\Service\TheFileIWantToLink.cs"); 

enlaces este código en una copia del archivo a mi TheFileIWantToLink.cs proyecto de Silverlight compartida (slSharedProject).

17

Debe establecer la propiedad CreateInPlace en true en la vstemplate. El documentation dice

Especifica si se debe crear el proyecto y realizar el reemplazo de parámetros en la ubicación especificada, o llevar a cabo el reemplazo de parámetros en una ubicación temporal y luego guardar el proyecto en la ubicación especificada.

Si quieren rutas relativas al trabajo, se necesita el reemplazo de parámetros que se produzca en el lugar donde se va a crear el proyecto, no en una ubicación temporal.

+1

Spot en lo que necesitaba, aplausos. Solo una nota rápida sobre la documentación de MSDN, indica que el valor predeterminado es verdadero, pero en realidad parece ser falso para las plantillas de proyectos de VS 2012. –

+0

CreateInPlace está roto para plantillas de proyecto de VC++. Confirmado como un error: http://connect.microsoft.com/VisualStudio/feedback/details/789683/problem-with-createinplace-tag-in-project-template – makhdumi

Cuestiones relacionadas