[C#] Visual Studio를 사용할 때 파일 빌드 버전을 자동으로 증가시킬 수 있습니까?

Visual Studio (2005)를 사용하여 파일의 빌드 및 버전을 자동으로 증가시키는 방법이 궁금합니다 .

say의 속성을 조회 C:\Windows\notepad.exe하면 버전 탭에 “파일 버전 : 5.1.2600.2180″이 표시됩니다. 내 dll 버전 에서도이 멋진 숫자를 얻고 싶습니다. 버전 1.0.0.0은 아닙니다.

몇 가지를 시도했지만 기본 기능이 아닌 것 같거나 잘못된 위치를 찾고 있습니다 (평소대로).

나는 주로 웹 프로젝트로 작업합니다 ….

나는 둘 다 보았다 :

  1. http://www.codeproject.com/KB/dotnet/Auto_Increment_Version.aspx
  2. http://www.codeproject.com/KB/dotnet/build_versioning.aspx

무언가를하기위한 많은 노력이 표준 관행이라고 믿을 수 없었습니다.

편집 :
내가 알 수있는 한 VS2005에서는 작동하지 않습니다 ( http://www.codeproject.com/KB/dotnet/AutoIncrementVersion.aspx )



답변

Visual Studio 2008에서는 다음이 작동합니다.

AssemblyInfo.cs 파일을 찾아 다음 두 줄을 찾으십시오.

[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

이것을 다음과 같이 변경해 볼 수 있습니다.

[assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyFileVersion("1.0.*")]

그러나 이것은 원하는 결과를 얻지 못할 것입니다. 제품 버전 1.0. * 및 파일 버전 1.0.0.0 입니다. 당신이 원하는 것이 아닙니다!

그러나 두 번째 줄을 제거하고 다음을 가지고 있다면

[assembly: AssemblyVersion("1.0.*")]

그런 다음 컴파일러는 파일 버전을 제품 버전과 동일하게 설정하고 자동으로 증가하는 제품 및 파일 버전을 동기화하여 원하는 결과를 얻습니다. 예 : 1.0.3266.92689


답변

AssemblyInfo.cs 파일을 열고 변경

// You can specify all the values or you can default the Build and Revision Numbers 
// by using the '*' as shown below:
// [assembly: AssemblyVersion("1.0.*")]
[assembly: AssemblyVersion("1.0.0.0")]
[assembly: AssemblyFileVersion("1.0.0.0")]

[assembly: AssemblyVersion("1.0.*")]
//[assembly: AssemblyFileVersion("1.0.0.0")]

IDE-프로젝트-> 속성-> 어셈블리 정보로 이동 하여이 작업을 수행 할 수 있습니다

그러나 이것은 어셈블리 버전을 자동으로 증가시킬 수 있으며

어셈블리 파일 버전 :이 필드에는 와일드 카드 ( “*”)를 사용할 수 없습니다.

파일 버전 필드에 *를 넣으려고하면 메시지 상자가 나타납니다.

assemblyinfo.cs를 열고 수동으로 수행하십시오.


답변

각 빌드에서 버전 번호를 변경하는 또 다른 옵션 은 MSBuild.Community.Tasks버전 작업 을 사용하는 것입니다 . 설치 프로그램을 다운로드하여 설치 한 후 다음 코드를 수정 하여 파일 에 붙여 넣기 만하면 됩니다.<Import Project="$(MSBuildBinPath)\Microsoft.CSharp.targets" />.csproj

<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets" />
<Target Name="BeforeBuild">
    <Version VersionFile="Properties\version.txt" Major="1" Minor="0" BuildType="Automatic" StartDate="12/31/2009" RevisionType="BuildIncrement">
      <Output TaskParameter="Major" PropertyName="Major" />
      <Output TaskParameter="Minor" PropertyName="Minor" />
      <Output TaskParameter="Build" PropertyName="Build" />
      <Output TaskParameter="Revision" PropertyName="Revision" />
    </Version>
    <AssemblyInfo CodeLanguage="CS"
                  OutputFile="Properties\VersionInfo.cs"
                  AssemblyVersion="$(Major).$(Minor)"
                  AssemblyFileVersion="$(Major).$(Minor).$(Build).$(Revision)" />
</Target>

참고 : StartDate 속성을 해당 지역에 맞게 조정하십시오. 현재는 불변 문화를 사용하지 않습니다.

2010 년 1 월 14 일의 세 번째 빌드의 VersionInfo.cs경우 다음 내용으로 작성 됩니다.

[assembly: AssemblyVersion("1.0")]
[assembly: AssemblyFileVersion("1.0.14.2")]

그런 다음이 파일을 프로젝트에 추가해야하며 ( 기존 항목 추가 를 통해 ) AssemblyVersionAssemblyFileVersion행을에서 제거해야합니다 AssemblyInfo.cs.

버전 구성 요소를 변경하는 다양한 알고리즘은 $(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.chm버전 속성에 설명되어 있습니다.


답변

나는 Christians와 비슷한 솔루션을 제안했지만 Community MSBuild 작업에 의존하지 않고 모든 개발자를 위해 이러한 작업을 설치하고 싶지 않기 때문에 이것은 옵션이 아닙니다.

코드를 생성하고 어셈블리로 컴파일 중이며 버전 번호를 자동 증가시키고 싶습니다. 그러나 VS 6.0. * AssemblyVersion 트릭을 사용하면 매일 빌드 번호가 자동 증가하고 이전 빌드 번호를 사용하는 어셈블리와의 호환성이 손상되므로 트릭을 사용할 수 없습니다. 대신 하드 코딩 된 AssemblyVersion을 사용하지만 자동 증분 AssemblyFileVersion을 갖고 싶습니다. AssemblyInfo.cs에 AssemblyVersion을 지정하고 다음과 같이 MSBuild에서 VersionInfo.cs를 생성하여이 작업을 수행했습니다.

  <PropertyGroup>
    <Year>$([System.DateTime]::Now.ToString("yy"))</Year>
    <Month>$([System.DateTime]::Now.ToString("MM"))</Month>
    <Date>$([System.DateTime]::Now.ToString("dd"))</Date>
    <Time>$([System.DateTime]::Now.ToString("HHmm"))</Time>
    <AssemblyFileVersionAttribute>[assembly:System.Reflection.AssemblyFileVersion("$(Year).$(Month).$(Date).$(Time)")]</AssemblyFileVersionAttribute>
  </PropertyGroup>
  <Target Name="BeforeBuild">
    <WriteLinesToFile File="Properties\VersionInfo.cs" Lines="$(AssemblyFileVersionAttribute)" Overwrite="true">
    </WriteLinesToFile>
  </Target>

그러면 버전이 빌드 ​​날짜와 함께 YY.MM.DD.TTTT 스키마를 따르는 AssemblyFileVersion의 Assembly 속성이있는 VersionInfo.cs 파일이 생성됩니다. 이 파일을 프로젝트에 포함시키고 빌드해야합니다.


답변

Build Version Increment 애드 인을 설치하십시오 . * 옵션보다 더 많은 제어 기능을 제공합니다.


답변

버전 번호를 얻으려면

 System.Reflection.Assembly assembly = System.Reflection.Assembly.GetExecutingAssembly();
 System.Reflection.AssemblyName assemblyName = assembly.GetName();
 Version version = assemblyName.Version;

버전 번호를 설정하려면 AssemblyInfo.cs를 작성 / 편집하십시오.

 [assembly: AssemblyVersion("1.0.*")]
 [assembly: AssemblyFileVersion("1.0.*")]

참고로, 세 번째 숫자는 2000 년 2 월 1 일 이후의 일 수이고, 네 번째 숫자는 하루의 총 초 수의 절반입니다. 자정에 컴파일하면 0이어야합니다.


답변

Visual Studio (2012, 2013, 2015) 2017 및 2019를 지원하는 Visual Studio 확장 자동 버전 이 있습니다.

스크린 샷
여기에 이미지 설명을 입력하십시오

여기에 이미지 설명을 입력하십시오