使用 IWizard 更改项目属性
Change project-properties with IWizard
我为 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
包含命名空间的正确条目(见下图)。
这是结果项目
如您所见,Assembly Name
和 Default namespace
都包含来自 projectsname
的值,而不是我在用户表单中输入的值(asdas
在我的案件)。但是,通过 项目-->属性-->应用程序 中的 Assembly Information
按钮可访问的版权日期设置正确(图中未显示)。
是否可以使用 replacementDictionary
更改项目属性主题?
显然我们不能通过这样的字典更改项目的属性。我们可以做的是修改这张地图中的 projectname
条目,这为我解决了这个问题。现在 Assembly title
、Assembly name
和 Default namespace
都引用同一个变量。这有点烦人(特别是我们不能独立更改程序集的名称和命名空间)但这对我有用。
replacementsDictionary["$projectname$"] = frm.AssemblyInfo.ProjectName;
replacementsDictionary["$safeprojectname$"] = frm.AssemblyInfo.ProjectName;
我为 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
包含命名空间的正确条目(见下图)。
这是结果项目
如您所见,Assembly Name
和 Default namespace
都包含来自 projectsname
的值,而不是我在用户表单中输入的值(asdas
在我的案件)。但是,通过 项目-->属性-->应用程序 中的 Assembly Information
按钮可访问的版权日期设置正确(图中未显示)。
是否可以使用 replacementDictionary
更改项目属性主题?
显然我们不能通过这样的字典更改项目的属性。我们可以做的是修改这张地图中的 projectname
条目,这为我解决了这个问题。现在 Assembly title
、Assembly name
和 Default namespace
都引用同一个变量。这有点烦人(特别是我们不能独立更改程序集的名称和命名空间)但这对我有用。
replacementsDictionary["$projectname$"] = frm.AssemblyInfo.ProjectName;
replacementsDictionary["$safeprojectname$"] = frm.AssemblyInfo.ProjectName;