Ich habe Probleme mit meinem Visual Studio Template Wizard's GUI angezeigt. Ich folgte diesen Schritten: http://msdn.microsoft.com/en-us/library/ms185301.aspxVS2012 Template Wizard - GUI wird nicht angezeigt
Hier ist, was ich getan habe:
1) eine C# Klassenbibliothek generiert (DLL) mit den folgenden Dateien:
UserInputForm.cs
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
namespace myprojectvstemplate
{
public partial class UserInputForm : Form
{
private string customMessage;
public UserInputForm()
{
InitializeComponent();
MessageBox.Show("here, calling ui");
}
public string get_CustomMessage()
{
return customMessage;
}
private void button1_Click(object sender, EventArgs e)
{
customMessage = textBox1.Text;
this.Dispose();
}
}
}
2) Ein Benutzereingabeformular mit einem Eingabefeld und einem Kombinationsfeld mit Code UserInputForm.cs wurde hinzugefügt.
using System;
using System.Collections.Generic;
using Microsoft.VisualStudio.TemplateWizard;
using System.Windows.Forms;
using EnvDTE;
namespace myprojectvstemplate
{
public class IWizardImplementation : IWizard
{
private UserInputForm inputForm;
private string customMessage;
// This method is called before opening any item that
// has the OpenInEditor attribute.
public void BeforeOpeningFile(ProjectItem projectItem)
{
}
public void ProjectFinishedGenerating(Project project)
{
}
// This method is only called for item templates,
// not for project templates.
public void ProjectItemFinishedGenerating(ProjectItem
projectItem)
{
}
// This method is called after the project is created.
public void RunFinished()
{
}
public void RunStarted(object automationObject,
Dictionary<string, string> replacementsDictionary,
WizardRunKind runKind, object[] customParams)
{
try
{
// Display a form to the user. The form collects
// input for the custom message.
inputForm = new UserInputForm();
inputForm.ShowDialog();
customMessage = inputForm.get_CustomMessage();
// Add custom parameters.
replacementsDictionary.Add("$custommessage$",
customMessage);
}
catch (Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
// This method is only called for item templates,
// not for project templates.
public bool ShouldAddProjectItem(string filePath)
{
return true;
}
}
}
3) einen öffentlichen/privaten starken Schlüssel generierten und die Baugruppe aus den "Unterzeichnung" Registerkarte in der Eigenschaftsseite registriert
4) Veröffentlichung generiert die DLL
5) registrierte es mit gacutil/i mydllname. dll, keine Fehler
6) Erstellt eine C++ Konsole Projektvorlage mit nur einer Datei:
#include <iostream>
using namespace std;
int main(int argc, char** argv)
{
cout << "Hi hello world:" << "$custommessage$";
return 0;
}
7) Exportieren als Vorlage Projekt (nicht Artikel) mit Checkbox auf "Import automatisch in vs". Modifizierte in der zip die .vstemplate Datei wie diese Datei:
<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project">
<TemplateData>
<Name>myproject_project</Name>
<Description><No description available></Description>
<ProjectType>VC</ProjectType>
<ProjectSubType>
</ProjectSubType>
<SortOrder>1000</SortOrder>
<CreateNewFolder>true</CreateNewFolder>
<DefaultName>myproject_project</DefaultName>
<ProvideDefaultName>true</ProvideDefaultName>
<LocationField>Enabled</LocationField>
<EnableLocationBrowseButton>true</EnableLocationBrowseButton>
<Icon>__TemplateIcon.ico</Icon>
</TemplateData>
<TemplateContent>
<Project TargetFileName="myproject_project.vcxproj" File="myproject_project.vcxproj" ReplaceParameters="true">
<ProjectItem ReplaceParameters="false" TargetFileName="$projectname$.vcxproj.filters">myproject_project.vcxproj.filters</ProjectItem>
<ProjectItem ReplaceParameters="true" TargetFileName="myproject_project.cpp">myproject_project.cpp</ProjectItem>
<ProjectItem ReplaceParameters="false" TargetFileName="ReadMe.txt">ReadMe.txt</ProjectItem>
</Project>
</TemplateContent>
<WizardExtension>
<Assembly>myprojectvstemplate, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=a0a3d031ed112d61</Assembly>
<FullClassName>myprojectvstemplate.IWizardImplementation</FullClassName>
</WizardExtension>
</VSTemplate>
Leider wenn ich versuche, eine neue Vorlage Projekt erstellen die Benutzeroberfläche wird nicht angezeigt. Das Projekt wird gerade geöffnet und es gibt keine Ersetzung des Parameters $ custommessage $.
Warum kann ich die Benutzeroberfläche meines Assistenten nicht anzeigen?
Zusätzlich: gibt es eine Möglichkeit zu debuggen, warum die Baugruppe nicht geladen wird ??
Ich musste viele Tricks und Maschinen machen, aber ich habe es endlich zur Arbeit gebracht. Danke, Paresh, obwohl du mir nur einen Hinweis gegeben hast, habe ich es endlich funktioniert. –
Gerne helfen :) – Paresh138