2016-08-03 3 views
0

Я создал шаблон для VS-проекта, где я хочу установить некоторые атрибуты, предоставленные пользователем. Так я реализовал IWizard -INTERFACE:Изменить свойства проекта с помощью IWizard

public void RunStarted(object automationObject, Dictionary<string, string> replacementsDictionary, WizardRunKind runKind, object[] customParams) 
{ 
    string projectPath = replacementsDictionary["$destinationdirectory$"]; 
    string projectName = replacementsDictionary["$projectname$"]; 

    SchemaWizardForm frm = new SchemaWizardForm(projectPath, projectName); 
    frm.ShowDialog(); 
    this.m_assemblyInfo = frm.AssemblyInfo; 

    replacementsDictionary["$assemblyTitle$"] = frm.AssemblyInfo.AssemblyName; 
    replacementsDictionary["$assemblyName$"] = frm.AssemblyInfo.AssemblyName; 
    replacementsDictionary["$copyrightYear$"] = DateTime.Now.Month + "/" + DateTime.Now.Year; 
    replacementsDictionary["$defaultNamespace$"] = frm.AssemblyInfo.RootNamespace; 
} 

В настоящее время в моем template's проект-файл у меня есть что-то вроде этого:

<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003"> 
    <PropertyGroup> 
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration> 
    <Platform Condition=" '$(Platform)' == '' ">x86</Platform> 
    <ProductVersion>8.0.30703</ProductVersion> 
    <SchemaVersion>2.0</SchemaVersion> 
    <OutputType>Library</OutputType> 
    <AppDesignerFolder>Properties</AppDesignerFolder> 
    <RootNamespace>$defaultNamespace$</RootNamespace> 
    <AssemblyName>$assemblyName$</AssemblyName> 
    <TargetFrameworkVersion>v3.5</TargetFrameworkVersion> 
    <FileAlignment>512</FileAlignment> 
    </PropertyGroup> 
</Project> 

И в AssemblyInfo.cs:

[assembly: AssemblyTitle("$assemblyTitle$")] 
[assembly: AssemblyCopyright("(C) $copyrightYear$ MyCompany")] 
// ... 

Я могу успешно создайте мой проект с помощью мастера. Его авторское право от AssemblyInfo.cs после поколения [assembly: AssemblyCopyright("(C) 8/2016 MyCompany")] - это прекрасно. Однако значение RootNamespace имеет значение, подобное projectsname. Я уже отлаживал вышеуказанный код, где replacementsDictionary имеет правильную запись для пространства имен (см. Рисунок ниже).

although the map has the correct values the result-project does not have those properties set appropriately

Вот результат-проект

enter image description here

Как вы можете видеть, как Assembly Name и Default namespace содержат значение из projectsname вместо того, что я вошел в мой пользовательский вид (asdas в моем случае). Тем не менее, дата доступа к авторскому праву, доступная через Assembly Information-кнопка в Project -> Propertes -> Application установлена ​​правильно (не показана на изображении).

Невозможно изменить свойства объектов themeelfes, используя replacementDictionary?

ответ

0

Очевидно, что мы не можем изменить свойства проекта с помощью такого словаря. Вместо этого мы можем изменить projectname -в этой карте, которая решила проблему для меня. Теперь Assembly title, Assembly name и Default namespace все относятся к той же переменной. Это немного раздражает (в частности, мы не можем изменять имя сборки и пространство имен независимо), но это работает для меня.

replacementsDictionary["$projectname$"] = frm.AssemblyInfo.ProjectName; 
replacementsDictionary["$safeprojectname$"] = frm.AssemblyInfo.ProjectName; 
Смежные вопросы