7

У меня проблемы с появлением GUI мастера визуальной студии. Я последовал за следующие действия: http://msdn.microsoft.com/en-us/library/ms185301.aspxМастер шаблонов VS2012 - GUI не отображается

Вот что я сделал:

1) сгенерирован C# класс библиотеки (DLL) со следующими файлами:

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) Добавлена ​​форма ввода пользователя с полем редактирования и списком с кодом UserInputForm.cs

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) генерируется открытый/закрытый сильный ключ и зарегистрировал сборку на вкладке «подписи» на странице свойств

4) Выпуск-сгенерировал DLL

5) зарегистрировали ее gacutil/я mydllname. длл, без ошибок

6) Создано ++ шаблон проекта для консоли C только с одним файлом:

#include <iostream> 
using namespace std; 


int main(int argc, char** argv) 
{ 

    cout << "Hi hello world:" << "$custommessage$"; 

    return 0; 
} 

7), экспортируемые в качестве шаблона проекта (не пункт) с флажком на «импорт автоматически в против». Модифицированный внутри архива в .vstemplate файл, как это:

<VSTemplate Version="3.0.0" xmlns="http://schemas.microsoft.com/developer/vstemplate/2005" Type="Project"> 
    <TemplateData> 
    <Name>myproject_project</Name> 
    <Description>&lt;No description available&gt;</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> 

К сожалению, когда я пытаюсь создать новый шаблон проекта пользовательский интерфейс не отображается на всех. Проект только что открыт, и нет замены параметра $ custommessage $.

Почему я не могу показать графический интерфейс моего мастера?

Дополнительно: есть ли способ отладки, почему сборка не загружается?

ответ

1

У меня была такая же проблема, как ОП, следуя той же статье.

Решение я нашел это:

В модифицирования разделе Шаблон,

Шаг 2 экстракт почтовый файл в папку и удалить почтовый файл. Затем измените vstemplate.

Наконец попробуйте мастер в новом экземпляре VS.

Я не знаю, является ли это правильным решением, но это то, что сработало для меня.

+0

Мне пришлось делать много обманщиков и механизмов, но я, наконец, получил его на работу. Спасибо, Пареш, хотя ты только что дал мне подсказку, я, наконец, начал работать. –

+0

Рад помочь :) – Paresh138

1

Возможно, сборка с помощью мастера не найдена.

В разделе WizardExtension вы должны точно указать свою сборку и имя класса.

Конечно, эта сборка должна быть в каталоге расширения или зарегистрирована в GAC.

<WizardExtension> 
    <Assembly>myprojectvstemplate, Version=1.0.0.0, Culture=Neutral, PublicKeyToken=a0a3d031ed112d61</Assembly> 
    <FullClassName>myprojectvstemplate.IWizardImplementation</FullClassName> 
</WizardExtension> 

Спасибо, Серж

+0

Я зарегистрировал его с помощью gacutil.exe, как описано выше, и не получил ошибок «сборка успешно зарегистрирована». Что касается расширения мастера, я не уверен на 100% о культуре (сборка говорит «нет»), но я думаю, что Neutral - это одно и то же. Токен обновлен, имя сборки совпадает с именем основного пространства имен, fullclassname - именем сборки. IWizardImplementation (мой класс UI) –

+0

Вы можете поймать некоторые исключения, если таковые имеются: 1) открыть новое диалоговое окно проекта в первом экземпляре VS2012, 2) открыть второй экземпляр VS2012 3) подключить отладчик со второго экземпляра VS2012 в первом случае, 4) включить исключения во втором экземпляре VS2012, 5) попытаться создать новый проект в первом экземпляре VS2012 Если есть некоторые исключения, вы увидите их во втором экземпляре VS2012 – TSV

+0

Пробовал это, но ничего, кроме этого исключения: «Значение не входит в ожидаемый диапазон». К сожалению, я не понимаю, какой диапазон/значение он имеет в виду. Если вы можете создать простой мастер для vs2012 с проектом шаблона и закрепить его мне, я был бы благодарен, поэтому я могу проверить, где я ошибаюсь. Это должно быть 5-минутной задачей, следующей за вышеприведенными шагами, и убедиться, что я не получил что-то неправильно. –

Смежные вопросы