2011-04-21 14 views
10

Tengo el archivo AssemblyInfo.cs generado automáticamente durante la compilación. Esto es parte de .csproj:¿Cómo se lee el valor de propiedad del archivo externo?

<PropertyGroup> 
    <Major>2</Major> 
    <Minor>3</Minor> 
    <Build>0</Build> 
    <Revision>0</Revision> 
</PropertyGroup> 
<Target Name="BeforeBuild"> 
    <SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="C:\Program Files\VisualSVN Server\bin"> 
     <Output TaskParameter="Revision" PropertyName="Revision" /> 
    </SvnVersion> 
    <AssemblyInfo CodeLanguage="CS" 
        OutputFile="$(MSBuildProjectDirectory)\Properties\VersionInfo.cs" 
        AssemblyVersion="$(Major).$(Minor).$(Build).$(Revision)" 
        AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)"/> 
</Target> 

Pero no sé cómo especificar Major y Minor propiedades fuera .csproj por lo que no es necesario descargar el proyecto cada vez que quiera cambiar de versión. Necesito cargarlos desde el archivo de texto especial dentro del proyecto o de alguna manera configurarlos en el diálogo de propiedades del proyecto. ¿Alguna sugerencia?

+0

Quiero ser capaz de cambiar mi versión de ensamblado ('Major' y las propiedades 'menor') sin descargar proyecto y edición .csproj en libreta. – Poma

Respuesta

13

usados ​​ReadLinesFromFile para hacer la versión en archivo separado:

<ReadLinesFromFile File="Properties\Version.txt"> 
    <Output TaskParameter="Lines" ItemName="Ver" /> 
</ReadLinesFromFile> 
<SvnVersion LocalPath="$(MSBuildProjectDirectory)" ToolPath="C:\Program Files (x86)\VisualSVN Server\bin"> 
    <Output TaskParameter="Revision" PropertyName="Revision" /> 
</SvnVersion> 
<Message Text="Version: @(Ver).$(Revision)" /> 
<AssemblyInfo 
    CodeLanguage="CS" 
    OutputFile="$(MSBuildProjectDirectory)\Properties\VersionInfo.cs" 
    AssemblyVersion="@(Ver).$(Revision)" 
    AssemblyFileVersion="@(Ver).$(Revision)"/> 
0

Use property pages, por lo que podría establecer estas propiedades en los cuadros de diálogo de hojas de propiedades del proyecto.

Deberá crear un archivo de propiedades y editar su archivo de proyecto (solo una vez) para agregar una directiva de importación a su archivo de propiedades. Here is an example.

+1

Este método se aplica solo a C++ porque C# usa Project Designer en lugar de páginas de propiedades, que es completamente diferente. – Poma

0

Usted puede utilizar sus herramientas externas

<Exec Command="newversion incMinor AssemblyInfo.cs > newversion.log" /> 
0

Si se trata de bloqueo de los archivos csproj por VS eso es su preocupación, mi respuesta a esta pregunta - How to turn off caching of build definitions in Visual studio podría ayudarle.

Puede mover el contenido de su tarea BeforeBuild (incluido el grupo de propiedades de la versión) a un archivo proj independiente e invocarlo con una tarea MSBuild (utilizando un nombre de archivo aleatorio generado por el ejemplo en la respuesta vinculada anterior). Esto le permitiría editar manualmente sus propiedades de número de versión sin tener que descargar/cargar su archivo csproj.

Cuestiones relacionadas