Frage

Ich habe einen MSBuild-Skript, das meine bestehende Lösung kompiliert, aber ich mag einige Eigenschaften eines der Projekte ändern in die Lösung zur Compile-Zeit, einschließlich, aber nicht beschränkt auf AssemblyProduct und Assembly .

Hier ist ein Ausschnitt aus meinem Build-Skript:

  <Target Name="Compile" >
 <MSBuild Projects="..\MySolution.sln" 
             Properties="Configuration=MyReleaseConfig;Platform=x86" />
  </Target>

Ich habe eine ausführbare Haupt und mehrere DLLs bekam, die kompiliert werden. Ich bin mir bewusst, der MSBuild Extension Pack und ich vermute, es könnte mir helfen, zu bekommen, wo ich sein muss, obwohl ich bin nicht sicher, wie es weitergeht.

Can I selektiv Assembly Eigenschaften bei der Erstellung ändern?

War es hilfreich?

Lösung

Sie sind auf dem richtigen Weg mit dem MSBuild Extension Pack.

ich die einfachste Weg finden, um bedingt die Montage Details zur Bauzeit zu erzeugen ist ein „Assembly“ target direkt in meine CSPROJ Datei (en), die eine aktualisierte Datei Assemblyinfo benötigen hinzuzufügen. Sie können das Ziel direkt an jede csproj Datei hinzufügen, die eine aktualisierte Datei Assemblyinfo erfordert, oder, wie ich es zu bevorzugen, eine benutzerdefinierte Zieldatei mit dem Assembly Ziel erstellen und jede csproj Datei enthalten Ihre benutzerdefinierten Ziele Datei.

Wie auch immer Sie wollen wahrscheinlich die MSBuild Extension Pack oder die MSBuild Community-Aufgaben verwenden ihre verwenden jeweilige Assembly Aufgabe.

Hier ist ein Code aus unserem Build-Skripte:

<!-- Import the AssemblyInfo task -->
<Import Project="$(MSBuildCommunityTasksPath)\MSBuild.Community.Tasks.Targets"/>

<!-- Overriding the Microsoft.CSharp.targets target dependency chain -->
<!-- Call our custom AssemblyVersion target before build, even from VS -->
<PropertyGroup>
    <BuildDependsOn>
        AssemblyVersion;
        $(BuildDependsOn)
    </BuildDependsOn>
</PropertyGroup>

<ItemGroup>
    <AssemblyVersionFiles Include="$(MSBuildProjectDirectory)\Properties\AssemblyInfo.cs"/>
</ItemGroup>

<Target Name="AssemblyVersion"
                Inputs="@(AssemblyVersionFiles)"
                Outputs="UpdatedAssemblyVersionFiles">
    <Attrib Files="%(AssemblyVersionFiles.FullPath)"
                    Normal="true"/>
    <AssemblyInfo
        CodeLanguage="CS"
        OutputFile="%(AssemblyVersionFiles.FullPath)"
        AssemblyCompany="$(CompanyName)"
        AssemblyCopyright="Copyright $(CompanyName), All rights reserved."
        AssemblyVersion="$(Version)"
        AssemblyFileVersion="$(Version)">
        <Output TaskParameter="OutputFile"
                        ItemName="UpdatedAssemblyVersionFiles"/>
    </AssemblyInfo>
</Target>

Andere Tipps

Sneal Antwort war sehr hilfreich, aber ich möchte zeigen, was ich eigentlich tun endete. Statt Bearbeitung csproj Dateien (es gibt mehr) ich stattdessen schöpfende Aufgaben zu meinem Build-Skript. Hier ist ein Ausschnitt:

    <PropertyGroup>  
        <ProductName>MyApp</ProductName>
        <CompanyName>MyCompany</CompanyName>
        <Major>1</Major>
        <Minor>0</Minor>
        <Build>0</Build>
        <Revision>0</Revision>
    </PropertyGroup> 

    <ItemGroup>
        <AssemblyVersionFiles Include="..\MyMainProject\Properties\AssemblyInfo.cs"/>
    </ItemGroup>

<Target Name="AssemblyVersionMAIN" Inputs="@(AssemblyVersionFiles)" Outputs="UpdatedAssemblyVersionFiles">
        <Attrib Files="%(AssemblyVersionFiles.FullPath)" Normal="true"/>
        <AssemblyInfo
            CodeLanguage="CS"
            OutputFile="%(AssemblyVersionFiles.FullPath)"
            AssemblyProduct="$(ProductName)"
            AssemblyTitle="$(ProductName)"
            AssemblyCompany="$(CompanyName)"
            AssemblyCopyright="© $(CompanyName) 2010"
            AssemblyVersion="$(Major).$(Minor).$(Build).$(Revision)"
            AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)"
            AssemblyInformationalVersion="$(Major).$(Minor).$(Build).$(Revision)">
            <Output TaskParameter="OutputFile" ItemName="UpdatedAssemblyVersionFiles"/>
        </AssemblyInfo>
    </Target>

 <Target Name="Compile" DependsOnTargets="AssemblyVersionMAIN">
      <MSBuild Projects="..\MySolution.sln"     
               Properties="Configuration=Release;Platform=x86;Optimize=true" />
 </Target>

Dann kann ich meine Variablen von der Kommandozeile oder einem Batch-Skript außer Kraft setzen, etwa so:

set MAJ=1
set MIN=2
set BLD=3
set REV=4

msbuild buildScript.xml /t:Compile /p:Major=%MAJ% /p:Minor=%MIN% /p:Build=%BLD% /p:Revision=%REV%
<Target Name="SetVersion">
<ItemGroup>
  <AssemblyInfoFiles  Include="$(TargetDir)\**\AssemblyInfo.cs"/>
</ItemGroup>

<Message Text="change the Version number for:"/>
<Message Text="%(AssemblyInfoFiles.FullPath)"/>

<MSbuild.ExtensionPack.Framework.AssemblyInfo 
 AssemblyInfoFiles="@(AssemblyInfoFiles)"
                                              AssemblyTitle="newTitle"
                                              AssemblyMajorVersion="2"
                                              AssemblyMinorVersion="0"/>

 </Target>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top