Ubah properti proyek dengan IWizard

Saya membuat template untuk proyek VS di mana saya ingin mengatur beberapa atribut yang disediakan oleh pengguna. Jadi saya menerapkan IWizard-antarmuka:

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

Sekarang di dalam file proyek template saya, saya memiliki sesuatu seperti ini:

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

Dan di AssemblyInfo.cs:

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

Saya berhasil membuat proyek saya menggunakan wizard. Tanggal hak ciptanya dari AssemblyInfo.cs setelah generasi adalah [assembly: AssemblyCopyright("(C) 8/2016 MyCompany")] - itu bagus. Namun RootNamespace memiliki nilai yang mirip dengan projectsname. Saya sudah men-debug kode di atas, di mana replacementsDictionary tidak memiliki entri yang benar untuk namespace (lihat gambar di bawah).

walaupun peta memiliki nilai yang benar, proyek hasil tidak mengatur properti tersebut dengan tepat

Inilah hasil proyeknya

masukkan deskripsi gambar di sini

Seperti yang Anda lihat, Assembly Name dan Default namespace berisi nilai dari projectsname alih-alih apa yang saya masukkan di formulir pengguna (asdas dalam kasus saya). Namun tanggal hak cipta yang dapat diakses melalui tombol Assembly Information di Proyek-->Propertes-->Aplikasi diatur dengan benar (tidak ditampilkan dalam gambar).

Apakah mungkin mengubah tema properti proyek sendiri menggunakan replacementDictionary?


person HimBromBeere    schedule 03.08.2016    source sumber


Jawaban (1)


Tentu saja kita tidak dapat mengubah properti proyek melalui kamus seperti itu. Yang bisa kita lakukan adalah mengubah entri projectname dalam peta ini yang memecahkan masalah bagi saya. Sekarang Assembly title, Assembly name dan Default namespace semuanya mengacu pada variabel yang sama. Agak mengganggu (khususnya kita tidak dapat mengubah nama Majelis dan namespace secara mandiri) tetapi ini berhasil untuk saya.

replacementsDictionary["$projectname$"] = frm.AssemblyInfo.ProjectName;
replacementsDictionary["$safeprojectname$"] = frm.AssemblyInfo.ProjectName;
person HimBromBeere    schedule 04.08.2016