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


358

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 )


1
와일드 카드는
VSVersion의

VS2005의 C ++ 프로젝트에서 작동하는 솔루션이 있습니까? 모든 대답은 .Net과 관련이있는 것 같습니다. 관련 질문 . 감사합니다
Deanna

.Net Core 프로젝트에서 AssemblyVersion 자동 증가는 기본적으로 작동하지 않습니다. csproj에 <Deterministic> False </ Deterministic>를 추가해야합니다. 보기 비주얼 스튜디오 2017 (.NET 코어)의 자동 버전을
마이클 Freidgeim

답변:


434

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


2
이것은 다른 것만 큼 잘 작동하며 VS2005에서 작동합니다. 나는 1.0.1.56 같은 일부 합리적 번호를 바라고에서 나는 1.0.3266.30135를 얻을 수 있지만, 적어도 그것은 (어떤 임의의 숫자이기는하지만 : D)이 증가하는 대신
inspite

14
오, 난 그냥 읽어 : 자동 (어떤 점에서 일) 날짜와 마지막 두 숫자를 입력하고 시간 (자정부터 절반 초)
inspite

20
이것이 작동하려면 AssemblyFileVersion 속성을 제거해야합니다.
David Faivre

76
나는 이것이 오래된 질문이라는 것을 알고 있지만이 답변에 길을 찾는 다른 사람들을 위해이 의견을 추가하고 싶었습니다. AssemblyVersion을 늘리면 dll을 사용하는 모든 프로젝트를 다시 컴파일해야합니다. 그러나 AssemblyVersion을 동일하게 유지하고 AssemblyFileVersion 자체를 늘리면 사용중인 파일을 다시 컴파일하지 않고도 새 dll을 교체 할 수 있습니다. 스스로에게 물어보십시오, 이것은 단지 새로운 빌드입니까, 아니면 새 버전을 출시합니까?
onefootswill

27
@ DD59 '빌드'는 2000 년 1 월 1 일 이후의 일 수입니다. '수정'은 자정의 초를 2 로 나눈 값 (2 초 간격이 아니라 2 초 간격)입니다. 여기를보십시오 : stackoverflow.com/a/3387167/11545
Cristian Diaconescu

154

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를 열고 수동으로 수행하십시오.


D : 당신의 방법 녹색 눈금을 수상 무엇 "이 분야에서 허용되지 않습니다"(*) "네, 그냥"A 와일드 카드 어셈블리 파일 버전 "발생
inspite

3
이 방법 : [조립체 AssemblyVersion ( "1.0. *")] // [조립체 AssemblyFileVersion ( '1.0.0.0')]
inspite

4
릴리스주기 동안 AssemblyVersion 번호를 변경하는 것은 바람직하지 않습니다. 대신 AssemblyFileVersion을 변경해야합니다. 이 주제에 대한 내 블로그 게시물을 참조하십시오 : philippetruche.wordpress.com/2008/08/12/… 또한 숫자를 변경하는시기에 대한 Suzanne Cook의 훌륭한 게시물을 참조하십시오 : blogs.msdn.com/b/suzcook/archive/2003/05/ 29 / 57148.aspx
Philippe

46
나는 날이 65536이되면 그것은 6 월 4 일 2179에서 작동이 중지됩니다 *를 사용하여주의 것
로이드 파월


53

각 빌드에서 버전 번호를 변경하는 또 다른 옵션 은 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버전 속성에 설명되어 있습니다.


2
이것이 FileVersion 구조체가 16 비트 정수를 사용한다는 끔찍한 사실을 피하는 가장 좋은 방법입니다.
Mike Post

1
패키지 콘솔을 사용하여 VS2012에 설치하는 데 문제가 발생했기 때문에 github.com/loresoft/msbuildtasks/downloads 에서 다운로드 한 야간 msi 설치 프로그램을 사용하는 것이 좋습니다 . 위의 복사 / 붙여 넣기 작업 감사!
DaveO

이 게시물에서 거부 및 편집 한 후 : "이 loresoft.com/projects/msbuildtasks / ... 를 확인하고 싶을 수도 있습니다 . 이전에 설명한 기본 기능을 향상시킬 수 있습니다."
radu florescu

1
이것은 TFS로 구축하는 사람들에게는 실용적인 솔루션이 아닙니다. 궁극적으로 VersionInfo.cs 및 version.txt 파일에 보류중인 편집 내용이 추가됩니다. 나에게 각 빌드마다 보류중인 편집을하는 것은 바람직하지 않습니다.
JDennis

@JDennis 는 TFS 버전 관리 팁을 보려면 여기 를 참조 하십시오 ...
Christian

25

나는 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 파일이 생성됩니다. 이 파일을 프로젝트에 포함시키고 빌드해야합니다.


MSBuild는 변수를 지원합니까? 넣어 더 좋을 것이다 [System.DateTime]::Now, 그렇지 않으면 근처 자정을 구축하는 경우 기존 빌드 번호가 사용 될 수 있습니다 경쟁 조건이있다, 하나에.
Edward Brey

이 네 가지 속성 DateTime.ToString을 설명 목적으로 단일 결합하지 않고 정의 했습니까 , 아니면 특별한 이유가 있습니까?
mafu

VS2017에서 BeforeBuild 이벤트가 시작되지 않으면 stackoverflow.com/questions/43921992/…를
Rhys Jones가

이 솔루션은 여기의 모든 답변 중 가장 적합합니다. 그러나 다른 분을 생성해야하는 프로젝트를 두 번째로 빌드하면 타임 스탬프 (또는 versioninfo.cs 파일의 내용)가 업데이트되지 않습니다. 프로젝트를 닫았다가 다시로드하면 타임 스탬프가 업데이트됩니다. 이것은 MSBuild의 버그입니까? @Boog
캐리


12

버전 번호를 얻으려면

 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이어야합니다.


12

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

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

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


그래서 나는 그것을 제거했고 더 말할 수 있습니다 ... 원래 csproj 파일을 수정합니다. 나는 그것이 매우 문제가있는 확장이라고 생각합니다.
Maxim

2
@Maxim 최신 버전을 사용해보십시오. VS 2017에서 작동해야합니다.
Rady

우수한 활용도. vs2017에서 잘 작동합니다. 문서는 약간 명확하지만 사이트를 통해 설치 한 다음 Nuget을 통해 MSBuild를 설치하고 작은 프로젝트에 적용하여 재생하고 빌드하십시오. 좋은. 그는 내가 달성하려는 것을 정확하게 말했지만 @Boog의 대답은 효과가 없었습니다.
err1

8

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

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

그러나 강력한 이름의 어셈블리에는 버전 번호를 자동으로 변경하지 않는 것이 좋습니다. 강력한 이름의 어셈블리 참조가 항상 특정 어셈블리 버전에 대한 참조로 인해 참조 된 어셈블리를 다시 작성할 때마다 해당 어셈블리에 대한 모든 참조를 업데이트해야하기 때문입니다. Microsoft는 인터페이스에 변경이있는 경우에만 .NET Framework 어셈블리의 버전 번호를 변경합니다. (NB : MSDN에서 링크를 계속 찾고 있습니다.)


VS의 모든 버전에 대해 빌드 또는 개정 상자에만 *를 넣을 수 있다고 생각합니다. 방금 VS 2005를 사용하여 시도했지만 정상적으로 작동합니다. 해당 코드 프로젝트 기사의 저자가 무엇을 말하고 있는지 잘 모르겠습니다.
MusiGenesis

서비스 팩으로 돌아 왔을 수도 있지만 VS 2005를 사용할 때 작동하지 않았다는 것을 기억합니다.
Dirk Vollmar

2005에서는 작동하지 않습니다. 서비스 팩을 찾아보고 다시 알려 드리겠습니다.
불구

아마도 MusiGenesis에 자동 버전 관리를 활성화하는 애드온이 설치되었을 수 있습니다.
Dirk Vollmar

@ 디보 : 아니오, 나는 공포증에 시달리고 있습니다. Visual Studio 2005 Professional SP1 만 있습니다. 나는 *에서 문제를 본 적이 없지만 일반적으로 수동으로 증가합니다. 이상한 버그 인 것 같습니다.
MusiGenesis

6

종속성을 손상시키지 않는 이점이있는 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 파일 (속성 하위 폴더)을 프로젝트에 포함

날짜를 다시 가져 오는 코드 (년에서 초까지) :

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를 복사 / 덮어 쓰기) 더 똑똑하게 만들 수 있습니다. 나는 이것을 꽤 성공적으로 한 번했다.


완벽하게 작동합니다. 그러나이 정규 표현식 % date : ~ -4,4 %. % date : ~ -7,2 %% date : ~ -10,2 %. % time : ~ 0,2 %% time : ~ 3,2 % . % time : ~ -5,2 % "
Cary

5

버전 번호를 "1.0. *"로 설정하면 마지막 두 숫자가 날짜 (일부에서 일 단위로)와 시간 (자정에서 초를 반으로)으로 자동 입력합니다.


내가 처음에 이것을 제대로 읽었다면 나는 많은 농작물을 구했을 것이다. thx
inspite


4

Cake 는 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);
});

여기:

  • 버전-어셈블리 버전입니다. 가장 좋은 방법은 주요 버전 번호를 잠그고 "1.0.0.0"과 같이 0으로 남겨 두는 것입니다.
  • FileVersion-어셈블리 파일 버전입니다.

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


3

프로젝트로 이동 | 속성 및 어셈블리 정보, 어셈블리 버전을 차례로 지정하고 마지막 또는 두 번째-마지막 상자에 *를 입력하십시오 (주요 또는 보조 구성 요소를 자동 증가시킬 수 없음).


2

MSBuild 커뮤니티 작업 ( http://msbuildtasks.tigris.org/ ) 프로젝트 에서 AssemblyInfo 작업을 사용 하여 .csproj / .vbproj 파일에 통합하십시오.

버전 번호를 날짜 및 시간에 연결하는 옵션을 포함하여 다양한 옵션이 있습니다.

추천합니다.


2

지금 당장 신청서에

string ver = Application.ProductVersion;

보고 ver = 1.0.3251.27860

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

(저는 소규모 회사를 지원하는 일인입니다.이 방법은 효과가 없을 수 있습니다.)


전화 번호가 빨리 소진 될 것입니다. 나는 yyddd를 2 년 연도와 3 년 연초부터 최대 365 일로 사용할 것입니다. 적어도 프로그램은 2065 년까지 컴파일 될 것입니다. 그러면 은퇴하고 다른 사람이 어떻게 처리하고 싶은지 알아낼 수 있습니다. 귀하의 프로그램이 여전히 그 날짜에 커미션 중이라면
AaA

2

AssemblyInfo 변경은 VS2012에서 작동합니다. Visual Studio에서는 더 이상 지원하지 않는 것이 이상해 보입니다. 이것이 빌드 / 릴리스 프로세스의 기본 부분이라고 생각할 것입니다.


2

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

이것은 일종의 실험이지만, 나는 그것을 좋아합니다. Jeff Atwood @ CodingHorror ( link )에서 영감을 받았습니다 .

결과 버전 번호는 1.2016.10709.11641(2016-07-09 16:41을 의미)이되어 다음을 허용합니다.

  • 가난한 망 제로 패딩 (멍청한 1s 와 함께 )
  • 거의 사람이 읽을 수있는 로컬 DateTime을 버전 번호에 포함
  • 중요한 주요 변경 사항을 위해 주요 버전 만 남겨 둡니다.

일반을 선택한 프로젝트에 새 항목을 추가 -> 텍스트 템플릿, 그것을 같은 이름 CustomVersionNumber아웃과 (해당되는 경우) 주석 AssemblyVersionAssemblyFileVersion의를 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}" #>")]

매분마다 프로그램을 컴파일하거나 하루에 두 번 이상 배포하지 않으므로 기술적으로 시간 부분이 불필요하게 중요한 정보를 차지하고 있습니다. 주요 미성년자는 1과 2를 사용하고 날짜 yyddd는 3 번째 숫자를 사용합니다 (2 자리 연도 + 같은 해의 시작부터 ddd 일)을 증가시키고 증분 빌드 번호는 4 일입니다.
AaA

2

파일 버전을 자동으로 늘리는 응용 프로그램을 만들었습니다.

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

    C : \ temp \ IncrementFileVersion.exe $ (SolutionDir) \ Properties \ AssemblyInfo.cs

  3. 프로젝트 구축

간단하게 유지하려면 오류가있는 경우 응용 프로그램에서만 메시지를 표시하고 제대로 작동하는지 확인하려면 '어셈블리 정보'에서 파일 버전을 확인해야합니다

참고 : 필드를 채우려면 'Assembly Information'단추에 대해 Visual Studio에서 솔루션을 다시로드해야하지만 출력 파일에는 업데이트 된 버전이 있습니다.

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


2

Visual Studio 2019에서

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

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

빌드 할 때이 오류가 발생합니다.

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

해결책

형식은 마침내 세트 후 받아 들여졌다 DeterministicFalseproject.csproj

<Deterministic>false</Deterministic>

편집하다:

어떤 이유로 설정의 경우 DeterministicFalse 구성 파일을로드하여 다른 위치에 저장 엉망이되었습니다.

해결 방법 :

개정 번호를 늘리기 위해 빌드 후 이벤트를 설정했습니다.

빌드 후 이벤트 배치 스크립트

이것은 autoincrement_version.ps1경로로 인수로 전달 되는 powershell 스크립트를 호출합니다.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

1

이 작업에 다음과 같은 코드를 사용할 수 있습니다.

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

폼 로딩에서 호출합니다.
이 코드를 사용하면 AssemblyInfo.cs에서 파일 정보의 일부를 업데이트 할 수 있지만 "표준"디렉토리 구조를 사용해야합니다.




1

어쩌면 여기에 대답하기에는 너무 늦었지만 누군가의 정신 문제를 해결할 수 있기를 바랍니다.

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


PS의 유일한 문제는 반응 속도가 느리고 실행이 가능하도록 구성해야한다는 것입니다. 작은 실행 파일, tt4 파일 또는 인라인 코드를 사용하여 프로그래머가 한 가지 방법으로 작성할 수 있다고 생각합니다.
AaA

0

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

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


1
VS는 일반적으로 빌드 번호 인 마지막 숫자를 증가시킵니다. 다른 모든 것 (즉, 그 전의 숫자)은 응용 프로그램의 버전을 나타 내기 때문에 사용자에게 달려 있습니다.
Огњен Шобајић

1
Ог quiteен Шобајић :별로 요. Microsoft의 번호 체계는 major.minor.build.revision입니다 (예 : 1.0.4.7). 어셈블리 버전을 "1.0. *"와 같은 것으로 설정하면 VS가 빌드 및 개정 번호를 설정합니다. 이 경우 빌드가 매일 증가하고 수정은 자정 이후의 초 수를 2로 나눈 값입니다.
Simon Tewsi

0

Tortoise Subversion을 사용하는 사람이라면 버전 번호 중 하나를 소스 코드의 Subversion 개정 번호에 연결할 수 있습니다. 나는 이것이 매우 유용하다는 것을 알게되었다 (감사 자들도 정말로 이것을 좋아한다!). 사전 빌드에서 WCREV 유틸리티를 호출하고 템플리트에서 AssemblyInfo.cs를 생성하면됩니다.

템플릿의 이름이 AssemblyInfo.wcrev이고 일반 AssemblyInfo.cs 디렉토리에 있고 거북이가 기본 설치 디렉토리에있는 경우 사전 빌드 명령은 다음과 같습니다 (NB All on one line).

"C:\Program Files\TortoiseSVN\bin\SubWCRev.exe" "$(ProjectDir)." "$(ProjectDir)Properties\AssemblyInfo.wcrev"  "$(ProjectDir)Properties\AssemblyInfo.cs"

템플릿 파일에는 wcrev 토큰 대체 문자열이 포함됩니다. $ WCREV $
eg

[assembly: AssemblyFileVersion("1.0.0.$WCREV$")]

참고 :
AssemblyInfo.cs가 생성되면 버전을 제어하지 않아도됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.