2011-07-26 8 views
6

He creado un paquete de idioma personalizado, que amplía ProjectPackage. Puedo crear el nuevo proyecto correctamente. Me gustaría poder agregar nuevos archivos fuente al proyecto mediante el elemento de menú Agregar-> Nuevo elemento ... (Ctrl + Mayús + A). Sin embargo, cuando hago clic aquí, la lista de plantillas disponibles está vacía. Me gustaría agregar mi propia plantilla personalizada al menú de plantillas disponibles para este tipo de proyecto. ¿Hay alguna documentación para lograr esto? Las únicas menciones que he visto han sido hackers de registro, pero tiene que haber una manera de hacerlo programáticamente, creo.VS2010 MPF: Completando la lista 'Agregar-> Nuevo elemento ...' para un proyecto personalizado

¿Existe algún método particular que pueda anular para completar la lista? ¿De verdad necesito hacer una plantilla, o puedo simplemente mostrar el 'nombre de plantilla', 'icono' y proporcionar la extensión de archivo correcta (los archivos deben estar vacíos cuando se crean, por lo que creo que una plantilla se desperdicia en gran medida en lo que quiero que hacer).

Aquí está el camino que he recorrido hasta ahora. Pensé que podría establecer mi tipo de proyecto y GUID en mi archivo .vproj personalizado (.vproj es la extensión de archivo en la que está registrado mi proyecto personalizado). Pensé que podría crear rápidamente una plantilla de artículo con el mismo ProjectType como mi archivo .vproj.

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Item"> 
    <TemplateData> 
    <Icon>VerilogSource.ico</Icon> 
    <DefaultName>module.v</DefaultName> 
    <Name>Basic Verilog Module</Name> 
    <Description> 
     A basic Verilog module for quickly adding new files to the project. 
    </Description> 
    <ProjectType>VerilogProject</ProjectType> 
    </TemplateData> 
    <TemplateContent> 
    <ProjectItem TargetFileName="$fileinputname$.v" 
     ReplaceParameters="true">module.v</ProjectItem> 
    </TemplateContent> 
</VSTemplate> 

Por desgracia, esta plantilla no se presenta en absoluto, a pesar de que he incluido en VSIX y copiado en el directorio de salida. Si coloco esta plantilla en la misma carpeta que mi .vproj, aparecerá como una plantilla para crear un nuevo proyecto (¡incorrecto!) Y aún no aparecerá en mi nueva lista de elementos. Todo esto podría deberse al hecho de que no utilizo una VSTemplate para crear mi proyecto. En su lugar, utilizo [ProvideProjectFactoryAttribute] para que VS2010 sepa dónde está mi archivo vproj, y usará el archivo vproj (que supongo que podría llamar una plantilla, pero no es una VSTemplate, es un Proyecto) para basar el nuevo proyecto fuera de.

Aquí es donde estoy hasta ahora, y sigo intentando nuevas cosas. Espero que alguien tenga la respuesta que estoy buscando. Gracias,

Giawa

Respuesta

4

Después de un montón de lectura y trabajo, aquí está mi respuesta:

Use archivos vstemplate para su proyecto y artículos, y compile como vstemplate (no copie a la salida, no lo hacen incluir con VSIX, al contrario de lo que sugiere el Microsoft Walkthrough). El compilador empacará cada elemento y plantilla de proyecto en su propio archivo zip. Ahora, necesitas decirle al vsixmanifest dónde están esos archivos. Los directorios predeterminados para proyectos y elementos son ProjectTemplates y ItemTemplates, respectivamente. Añadirlos a su vsixmanifest así:

<Content> 
    <VsPackage>|%CurrentProject%;PkgdefProjectOutputGroup|</VsPackage> 
    <ProjectTemplate>ProjectTemplates</ProjectTemplate> 
    <ItemTemplate>ItemTemplates</ItemTemplate> 
    </Content> 

Ahora, también hay que añadir algunas propiedades a su archivo .csproj que su paquete VSIX se construye en estas propiedades, probablemente, se pueden agregar mediante algún método complicado, pero la más fácil. es simplemente soltarlos directamente en el archivo .csproj.

<PropertyGroup> 
    <GetVsixSourceItemsDependsOn>$(GetVsixSourceItemsDependsOn);GetVsixTemplateItems</GetVsixSourceItemsDependsOn> 
    </PropertyGroup> 
    <Target Name="GetVsixTemplateItems" DependsOnTargets="ZipProjects;ZipItems"> 
    <ItemGroup> 
     <VSIXSourceItem Include="@(IntermediateZipItem)"> 
     <VSIXSubPath>ItemTemplates\%(IntermediateZipItem.Language)\%(IntermediateZipItem.OutputSubPath)\%(IntermediateZipItem.Culture)</VSIXSubPath> 
     </VSIXSourceItem> 
     <VSIXSourceItem Include="@(IntermediateZipProject)"> 
     <VSIXSubPath>ProjectTemplates\%(IntermediateZipProject.Language)\%(IntermediateZipProject.OutputSubPath)\%(IntermediateZipProject.Culture)</VSIXSubPath> 
     </VSIXSourceItem> 
    </ItemGroup> 
    </Target> 

Esto incluirá ahora los archivos zip en su proyecto, y con un poco de suerte, ahora tendrá proyectos y elementos que están vinculados correctamente juntos.

Afortunadamente, hay bastante documentación para plantillas de artículos/proyectos. Me tomó un tiempo darme cuenta de que es la forma correcta de hacerlo.Buena suerte,

Giawa

+0

Esto fue tan tremendamente útil para mí. El ingrediente faltante fue agregar los elementos al manifiesto. No pude encontrar ninguna referencia sobre la necesidad de hacer eso. ¡Si pudiera darle más de una votación, lo haría! Ojalá no hubiera desperdiciado tantas horas buscando por ahí antes de encontrar esto ... – MarkPflug

+0

También me di cuenta, después de seguir el [Tutorial] (https://msdn.microsoft.com/en-us/library/cc512961%28v= VS.100% 29.aspx? F = 255 & MSPPError = -2147217396), al hacer clic derecho en un nodo de proyecto, no hay ningún comando 'delete' o' remove' en el menú. –

0

Todos esos pasos se puede hacer automáticamente dentro del Visual Studio :

Primero Crear una plantilla de elementos en un proyecto separado (lo puede hacer por File > Export template). Puede personalizar esta plantilla editando el archivo .vstemplate.

Después que ha recibido un .zip archivo, arrastrarlo a su solución principal VSPackage y haga lo siguiente:

  1. .vsixmanifest Haga clic en el archivo.
  2. Haga clic en Assets > New.
  3. Conjunto Type a Microsoft.VisualStudio.ItemTemplate (Plantilla de artículo).
  4. Establezca Source en File on filesystem.
  5. Establezca Path en su plantilla de elemento .zip.
  6. Reconstruir la solución.

Nota: que estaba usando Visual Studio 2013 .

Cuestiones relacionadas