使用IWizard更改项目属性

时间:2016-08-03 12:45:52

标签: c# visual-studio-2010 project-template

我为VS项目创建了一个模板,我想在其中设置用户提供的一些属性。所以我实现了IWizard - interface:

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;
}

现在在我的模板的项目文件中我有这样的东西:

<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 NameDefault namespace都包含projectsname中的值,而不是我在用户表单中输入的值(在我的情况下为asdas) 。但是,通过项目 - &gt;属性 - &gt;应用程序中的Assembly Information - 按钮可以访问的版权日期设置正确(图片中未显示)。

是否可以使用replacementDictionary更改项目属性主题?

1 个答案:

答案 0 :(得分:0)

显然,我们无法通过这样的字典更改项目的属性。我们可以做的是修改此地图中的projectname - 条目,为我解决了这个问题。现在Assembly titleAssembly nameDefault namespace都引用同一个变量。这有点烦人(特别是我们无法独立更改程序集和命名空间的名称),但这对我有用。

replacementsDictionary["$projectname$"] = frm.AssemblyInfo.ProjectName;
replacementsDictionary["$safeprojectname$"] = frm.AssemblyInfo.ProjectName;