2016-08-03 9 views
0

Ich habe eine Vorlage für ein VS-Projekt erstellt, in dem ich einige vom Benutzer bereitgestellte Attribute einstellen möchte. So implementiert ich IWizard -Schnittstelle:Projekteigenschaften ändern mit 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; 
} 

Jetzt in meiner template's Projekt-Datei, die ich so etwas wie diese:

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

Und in AssemblyInfo.cs:

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

Ich kann erfolgreich Erstellen Sie mein Projekt mit dem Assistenten. Sein Copyright-Datum von AssemblyInfo.cs nach der Generierung ist [assembly: AssemblyCopyright("(C) 8/2016 MyCompany")] - was in Ordnung ist. Die RootNamespace hat jedoch einen ähnlichen Wert wie die . Ich debuggte bereits den obigen Code, wobei der replacementsDictionary den richtigen Eintrag für den Namespace enthält (siehe Bild unten).

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

Dies ist das Ergebnis-Projekt

enter image description here

Wenn Sie den Wert von projectsname statt der Assembly Name und die Default namespace sehen beide enthalten kann, was ich in meinem Benutzer-Formular eingegeben (asdas in meinem Fall). Allerdings ist das Copyright-Datum, das über die Assembly Information-Schaltfläche unter Projekt -> Eigenschaften -> Anwendung zugänglich ist, richtig eingestellt (nicht im Bild gezeigt).

Ist es nicht möglich, die Eigenschaften des Projekts mit einem replacementDictionary zu ändern?

Antwort

0

Natürlich können wir die Projekteigenschaften nicht über ein solches Wörterbuch ändern. Was wir stattdessen tun können, ist, den projectname -Eintrag innerhalb dieser Karte zu ändern, die das Problem für mich löste. Jetzt beziehen sich Assembly title, Assembly name und Default namespace alle auf dieselbe Variable. Es ist ein bisschen nervig (insbesondere, dass wir den Namen der Assembly und den Namespace nicht unabhängig voneinander ändern können), aber das funktioniert für mich.

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