Я создал шаблон для 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
имеет правильную запись для пространства имен (см. Рисунок ниже).
Вот результат-проект
Как вы можете видеть, как Assembly Name
и Default namespace
содержат значение из projectsname
вместо того, что я вошел в мой пользовательский вид (asdas
в моем случае). Тем не менее, дата доступа к авторскому праву, доступная через Assembly Information
-кнопка в Project -> Propertes -> Application установлена правильно (не показана на изображении).
Невозможно изменить свойства объектов themeelfes, используя replacementDictionary
?