문제

난 그냥 내가 어떻게 그럴 수 있는지 궁금해서였어 자동으로 Visual Studio(2005)를 사용하여 내 파일의 빌드(및 버전?)를 늘립니다.

say의 속성을 찾아보면 C:\Windows\notepad.exe, 버전 탭에 "파일 버전:5.1.2600.2180".나는 버전 1.0.0.0이 아닌 내 dll 버전에서도 이러한 멋진 숫자를 얻고 싶습니다. 다소 지루하다는 점을 직시해 보겠습니다.

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

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

나는 둘 다 보았다 :

  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 에서이 작업을 수행 할 수 있습니다.

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

어셈블리 파일 버전 :이 필드에서는 와일드 카드 ( "*")가 허용되지 않습니다.

메시지 상자는 파일 버전 필드에 A *를 배치하려는 경우입니다.

따라서 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>

메모: 스타트 데이트 속성을 로케일에 조정하십시오. 현재는 변하지 않는 문화를 사용하지 않습니다.

2010 년 1 월 14 일에 세 번째 빌드의 경우 VersionInfo.cs 이 콘텐츠로 :

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

이 파일은 프로젝트에 추가해야합니다 ( 기존 항목을 추가합니다), 그리고 AssemblyVersion 그리고 AssemblyFileVersion 선을 제거해야합니다 AssemblyInfo.cs.

버전 구성 요소 변경을위한 다른 알고리즘은 다음과 같습니다. $(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.chm 그리고 버전 속성.

나는 Christian과 유사한 솔루션을 생각해 냈지만 커뮤니티 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 파일이 생성됩니다.이 파일을 프로젝트에 포함하고 이를 사용하여 빌드해야 합니다.

설치 버전 증분을 빌드하십시오 애드 인. * 옵션보다 더 많은 제어를 제공합니다.

버전 번호를 얻으려면 시도하십시오

 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.*")]

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

비주얼 스튜디오 확장이 있습니다 자동 버전 Visual Studio 2012, 2013, 2015 & 2017을 지원합니다.

스크린 샷 enter image description here

enter image description here

다른 게시물에 설명 된대로 AssemblyInfo의 버전 번호 또는 프로젝트 속성 아래에서 a *를 설정한다고해서 모든 버전의 Visual Studio / .NET에서 작동하지 않습니다.

Afaik은 2005 년대로 작동하지 않았지만 (2003 년과 2008 년 vs 2008). VS 2005의 경우 다음을 사용할 수 있습니다. 자동 증분 Visual Studio 2005 버전 빌드 및 개정 번호 컴파일 시간.

그러나 강력한 이름의 어셈블리에는 버전 번호를 자동으로 변경하는 것이 권장되지 않습니다. 그 이유는 강력한 이름의 어셈블리 참조가 항상 특정 어셈블리 버전에 대한 참조로 인해 참조 된 어셈블리가 재건 될 때마다 그러한 어셈블리에 대한 모든 참조가 업데이트되어야하기 때문입니다. Microsoft 자체는 인터페이스에 변경 사항이있는 경우에만 .NET Framework 어셈블리의 버전 번호를 변경합니다. (NB : 나는 아직도 내가 그것을 읽은 MSDN의 링크를 찾고 있습니다.)

의존성을 깨뜨리지 않는 이점이있는 AssemblyFileVersion 속성에 대한 정보를 증분 (dateTime) 정보를 얻으려면.


Boog의 솔루션을 바탕으로 (vs2008로 인해 작동하지 않았을 수도 있습니까?), 파일을 생성하는 사전 건축 이벤트의 조합, 해당 파일을 추가 한 다음 (버전 속성 포함)를 사용하여 읽을 수 있습니다. 그 가치는 다시. 그건..

건축 사전 이벤트 :

echo [assembly:System.Reflection.AssemblyFileVersion("%date:~-4,4%.%date:~-7,2%%date:~-10,2%.%time:~0,2%%time:~3,2%.%time:~-5,2%")] > $(ProjectDir)Properties\VersionInfo.cs

프로젝트에 결과 versioninfo.cs 파일 (Properties subfolder)을 포함시킵니다.

날짜를 돌려주는 코드 (몇 년에서 초) :

var version = assembly.GetName().Version;
var fileVersionString = System.Diagnostics.FileVersionInfo.GetVersionInfo(assembly.Location).FileVersion;
Version fileVersion = new Version(fileVersionString);
var buildDateTime = new DateTime(fileVersion.Major, fileVersion.Minor/100, fileVersion.Minor%100, fileVersion.Build/100, fileVersion.Build%100, fileVersion.Revision);

그다지 편안하지는 않습니다. 또한 파일이 항상 변경되기 때문에 그것이 많은 힘을 차지하고 있는지 모르겠습니다.

예를 들어 몇 분/시간마다 versioninfo.cs 파일 만 업데이트하는 경우 (임시 파일을 사용한 다음 충분히 큰 변경이 감지되면 실제 versioninfo.cs를 복사/덮어 쓰는 경우)를 더 똑똑하게 만들 수 있습니다. 나는 이것을 한 번 꽤 성공적으로했다.

버전 번호를 "1.0.*"로 설정하면 날짜 (어느 시점에서)와 시간 (자정부터 초의 절반)으로 마지막 두 숫자를 자동으로 채우게됩니다.

아래의 프로젝트 속성에 있습니다 게시

http://screencast.com/t/Vj7rhqJO
(~ http://screencast.com/t/vj7rhqjo)

케이크 AssemblyInfo 파일 패치를 지원합니다. 케이크를 손에 넣으면 자동 버전 증가를 구현하는 무한한 방법이 있습니다.

C# 컴파일러와 같은 버전 증분의 간단한 예 : 다음과 같습니다.

Setup(() =>
{
    // Executed BEFORE the first task.
    var datetimeNow = DateTime.Now;
    var daysPart = (datetimeNow - new DateTime(2000, 1, 1)).Days;
    var secondsPart = (long)datetimeNow.TimeOfDay.TotalSeconds/2;
    var assemblyInfo = new AssemblyInfoSettings
    {
        Version = "3.0.0.0",
        FileVersion = string.Format("3.0.{0}.{1}", daysPart, secondsPart)
    };
    CreateAssemblyInfo("MyProject/Properties/AssemblyInfo.cs", assemblyInfo);
});

여기:

  • 버전 - 어셈블리 버전입니다. 모범 사례는 주요 버전 번호를 잠그고 0 ( "1.0.0.0")으로 남은 상태를 유지하는 것입니다.
  • FileVersion- 어셈블리 파일 버전입니다.

버전뿐만 아니라 패치 할 수 있습니다 또한 다른 모든 필요한 정보.

프로젝트로 이동 | 속성 및 어셈블리 정보 및 그 다음 어셈블리 버전과 마지막 또는 두 번째 상자에 *를 넣습니다 (메이저 또는 사소한 구성 요소를 자동 증가시킬 수 없음).

MSBuild 커뮤니티 작업의 AssemblyInfo 작업을 사용하십시오 (http://msbuildtasks.tigris.org/) project, 그리고이를 .csproj/.vbproj 파일에 통합하십시오.

버전 번호를 날짜와 시간에 묶는 옵션을 포함하여 여러 가지 옵션이 있습니다.

추천.

현재 내 신청서를 위해

string ver = Application.ProductVersion;

보고 ver = 1.0.3251.27860

값 3251은 2000 년 1 월 1 일 이후의 일 수입니다. 나는 그것을 사용하여 내 응용 프로그램의 스플래시 화면에 버전 생성 날짜를 넣습니다. 사용자를 대할 때는 긴 숫자보다 의사 소통하기 쉬운 생성 날짜를 요청할 수 있습니다.

(저는 소규모 회사를 지원하는 일인 부서입니다.이 접근법은 당신에게 효과가 없을 수도 있습니다.)

vs2012에서 조립 작업을 변경합니다. Visual Studio에서는 더 많은 지원이 없다는 것이 이상해 보입니다. 이것이 빌드/릴리스 프로세스의 기본 부분이라고 생각할 것입니다.

버전을 얻는 방법 {major}.{year}.1{date}.1{time}

이것은 일종의 실험이지만 나는 그것을 좋아합니다. Jeff Atwood @ CodingHorror에서 영감을 얻었습니다.링크).

결과 버전 번호가됩니다 1.2016.10709.11641 (의미 2016-07-09 16:41)

  • 가난한 사람은 제로 패딩 (멍청한 선두와 함께 1에스)
  • 거의 인간이 읽을 수 있습니다 현지의 DateTime은 버전 번호에 포함됩니다
  • 실제로 주요 버전 만 남겨두고 주요 버전을 만듭니다.

프로젝트에 새 항목 추가, 일반 -> 텍스트 템플릿을 선택하고 CustomVersionNumber 그리고 (해당되는 경우) AssemblyVersion 그리고 AssemblyFileVersion 안에 Properties/AssemblyInfo.cs.

그런 다음이 파일을 저장하거나 프로젝트를 구축 할 때 .cs 생성물 아래에서 하위 항목으로 위치한 파일 .tt 파일.

<#@ template language="C#" #>
<#@ assembly name="System.Core" #>
<#@ import namespace="System.Linq" #>

//
// This code was generated by a tool. Any changes made manually will be lost
// the next time this code is regenerated.
//

using System.Reflection;

<#
    var date = DateTime.Now;
    int major = 1;
    int minor = date.Year;
    int build = 10000 + int.Parse(date.ToString("MMdd"));
    int revision = 10000 + int.Parse(date.ToString("HHmm"));
#>

[assembly: AssemblyVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]
[assembly: AssemblyFileVersion("<#= $"{major}.{minor}.{build}.{revision}" #>")]

어쩌면이 작업의 경우 다음과 같은 코드를 사용할 수 있습니다.

    private bool IncreaseFileVersionBuild()
    {
        if (System.Diagnostics.Debugger.IsAttached)
        {
            try
            {
                var fi = new DirectoryInfo(AppDomain.CurrentDomain.BaseDirectory).Parent.Parent.GetDirectories("Properties")[0].GetFiles("AssemblyInfo.cs")[0];
                var ve = System.Diagnostics.FileVersionInfo.GetVersionInfo(System.Reflection.Assembly.GetExecutingAssembly().Location);
                string ol = ve.FileMajorPart.ToString() + "." + ve.FileMinorPart.ToString() + "." + ve.FileBuildPart.ToString() + "." + ve.FilePrivatePart.ToString();
                string ne = ve.FileMajorPart.ToString() + "." + ve.FileMinorPart.ToString() + "." + (ve.FileBuildPart + 1).ToString() + "." + ve.FilePrivatePart.ToString();
                System.IO.File.WriteAllText(fi.FullName, System.IO.File.ReadAllText(fi.FullName).Replace("[assembly: AssemblyFileVersion(\"" + ol + "\")]", "[assembly: AssemblyFileVersion(\"" + ne + "\")]"));
                return true;
            }
            catch
            {
                return false;
            }
        }
        return false;
    }

양식 로딩에서 호출하십시오.
이 코드를 사용하면 File Info의 모든 부분을 AssemblyInfo.cs에서 업데이트 할 수 있습니다 (그러나 "표준"디렉토리 구조를 사용해야합니다).

어셈블리 인 필. 무료. 오픈 소스.

이 접근법을 사용하고 있습니다 https://stackoverflow.com/a/827209/3975786 T4 템플릿을 "솔루션 항목"에 배치하고 각 프로젝트 내에서 "링크로 추가"와 함께 사용합니다.

어쩌면 여기서 대답하기에는 너무 늦었을 수도 있지만 누군가의 열렬한 문제를 해결하기를 바랍니다.

자동 PowerShell 스크립트를 사용하여 모든 프로젝트의 어셈블리 버전을 변경하는 방법. 이 기사 많은 문제를 해결할 것입니다.

빌드를 할 때마다 가장 중요하지 않은 숫자를 자동 증가시킵니다.

나는 다른 사람들을 업데이트하는 방법을 전혀 모른다. 그러나 당신은 적어도 이미 그것을보아야한다 ...

파일 버전을 자동으로 증가시키기위한 응용 프로그램을 만들었습니다.

  1. 다운로드 신청
  2. 사전 건축 이벤트 명령 줄에 다음 줄을 추가하십시오

    C : temp excrementfileversion.exe $ (SolutionDir) properties assemblyInfo.cs

  3. 프로젝트를 구축하십시오

간단하게 유지하려면 앱이 오류가있는 경우 메시지 만 던지기 위해 '어셈블리 정보'에서 파일 버전을 확인해야합니다.

참고 : 필드를 채우려면 '어셈블리 정보'버튼을 위해 Visual Studio의 솔루션을 다시로드해야하지만 출력 파일에는 업데이트 된 버전이 있습니다.

제안 및 요청은 telson_alva@yahoo.com으로 이메일을 보내주십시오

Visual Studio 2019에서

내가 추가하기에 충분하지 않았습니다

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

만들 때이 오류가 발생합니다

지정된 버전 문자열은 필요한 형식을 준수하지 않습니다.

해결책

내가 설정 한 후에 형식이 마침내 받아 들여졌습니다 Deterministic 에게 False 안에 project.csproj

<Deterministic>false</Deterministic>

편집하다:

어떤 이유로 설정 Deterministic 에게 False 내 구성 파일을 엉망으로 만들고 다른 위치에 저장했습니다.

해결 방법 :

구축 후 이벤트를 설정하여 개정 번호를 증가시킵니다.

건축 후 이벤트 배치 스크립트

이것은 PowerShell 스크립트라고합니다 autoincrement_version.ps1 논쟁으로 통과 AssemblyInfo.cs

if $(ConfigurationName) == Release (
PowerShell -ExecutionPolicy RemoteSigned $(ProjectDir)autoincrement_version.ps1 '$(ProjectDir)My Project\AssemblyInfo.cs'
)

Poweshell 스크립트

Regex를 사용하여 개정 번호를 자동화합니다

param( [string]$file );
  $regex_revision = '(?<=Version\("(?:\d+\.)+)(\d+)(?="\))'
  $found = (Get-Content $file) | Select-String -Pattern $regex_revision
  $revision = $found.matches[0].value
  $new_revision = [int]$revision + 1
  (Get-Content $file) -replace $regex_revision, $new_revision | Set-Content $file -Encoding UTF8
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top