Как прочитать значение свойства из внешнего файла? - PullRequest
10 голосов
/ 21 апреля 2011

У меня есть файл AssemblyInfo.cs, автоматически генерируемый во время сборки. Вот часть файла .csproj:

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

Но я не знаю, как указать свойства Major и Minor вне файла .csproj, поэтому мне не нужно выгружать проект каждый раз, когда я хочу изменить версию. Мне нужно либо загрузить их из специального текстового файла внутри проекта, либо как-то установить их в диалоге свойств проекта. Есть предложения?

Ответы [ 4 ]

14 голосов
/ 09 июня 2011

Используется ReadLinesFromFile для создания версии в отдельном файле:

<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 голосов
/ 28 апреля 2011

Вы можете использовать свои внешние инструменты

<Exec Command="newversion incMinor AssemblyInfo.cs > newversion.log" /> 
0 голосов
/ 05 июня 2011

Если вас беспокоит блокировка файлов csproj VS, мой ответ на этот вопрос - Как отключить кэширование определений сборки в Visual studio , возможно, вам поможет.

Вы можете переместить содержимое вашей задачи BeforeBuild (включая группу свойств version) в отдельный файл proj и вызвать его с помощью задачи MSBuild (используя случайное имя файла, созданное в примере в связанном ответе выше). Это позволит вам вручную редактировать свойства номера версии без необходимости выгружать / загружать файл csproj.

0 голосов
/ 21 апреля 2011

Используйте страницы свойств , чтобы вы могли установить эти свойства в диалоговых окнах листов свойств проекта.

Вам потребуется создать файл свойств и отредактировать файл проекта (только один раз), чтобы добавить директиву импорта в файл свойств. Вот пример .

...