모든 .NET 어셈블리는 버전 번호에 1.0. * 형식을 사용합니다. 아마도 *는 현재 날짜와 시간으로 대체되고 숫자로 변환됩니다. 그것을 다시 날짜와 시간으로 변환하는 공식은 무엇입니까?.net 어셈블리 버전을 날짜로 변환 할 수 있습니까?
답변
, 나는, 빌드 번호 1 2000 년 1 월 개정 이후의 일 수를 초 그러나 2
var result = new DateTime(2000, 1, 1);
result = result.AddDays(buildNumber);
result = result.AddSeconds(revision * 2);
로 나눈 당일 자정 이후입니다 것으로 나타났습니다 다른 사람들이 이미 지적한 바에 따르면 문서화가 이것이 항상 사실이라는 것을 보장하지는 않습니다.
감사합니다! 그것이 내가 필요한 것입니다. –
조립 버전은 여기에 설명되어 있습니다 : 아래의 인용문에서 http://msdn.microsoft.com/en-us/library/51ket42z.aspx
, 나는 것이 무엇을 요구하는지하는 것은 불가능하며 귀하의 정보가 잘못되었다고 말한다.
총회 버전 번호의 각 조립 는 정체성의 일부로 버전 번호가 있습니다. 따라서 버전 번호가 인 두 어셈블리는 런타임에 의해 완전히 다른 어셈블리로 간주되는 입니다. 이 버전 번호가 물리적으로 다음 형식의 네 부분으로 된 문자열로 표시 입니다 : 나는에 링크 된 페이지의 하단에
<major version>.<minor version>.<build> number>.<revision>
그러나,이 사용자 지정 어셈블리에 대한 정보는 속성과 어셈블리 속성 설정에 대한 링크. 거기에 도움이 될만한 것을 찾을 수 있습니다.
이의 결과는 빌드입니다 : - 편집 난 당신이 내 댓글에 대한 답에 게시 링크, 내가 볼 수있는 유일한 것은 한 번 봐했다
추가이있다 숫자 은 무작위 지정된 시작일 이후의 일 수로 설정되고 자정부터 자정 이후로 초의 수를 기준으로 수정됩니다.
무작위로 지정된 시작 날짜가 무엇인지 알아낼 수 있다면 "무작위로 지정된 시작 날짜"라고 말하고 싶습니다. 찾아내는 데 가치가있다. 당신은 더 나은 것 가장 pactices
을 코딩
뻔뻔한 플러그 개정 제어 및 자동화 된 빌드 프로세스를 사용하고 asembly의 빌드 날짜를 결정하는 것과 로그를 사용하는 봉사했다.
버전 문자열이 형식은 :
<major version>.<minor version>.<build number>.<revision>
을하고 버전을 설정하면 당신은 1.0.*
에 설명했듯이 :
이의 결과에 빌드 번호 세트입니다 무작위 지정된 시작 날짜 이후 자정 이후 초를 기준으로 개정판 이후의 일 수.
여기의 키는 "임의"입니다.따라서 수정본을 하루 중 시간대로 번역 할 수는 있지만 날짜로 해석 할 수없는 것처럼 들립니다.
MSDN에 따르면 : "기본 빌드 번호 증가를 매일 기본 버전 번호는 무작위입니다.."
AssemblyVersionAttribute
의 출처를 반사경으로 보면 아무 것도하지 않고 그냥 문자열 만 수락한다는 것을 알 수 있습니다. 그래서 마법은 컴파일러 자체에서 발생합니다. 필자가 말할 수있는 한 어디에서나 문서화되지 않았습니다. "매일 증가"는 어느 시점에서부터 시작되는 것입니까?
신뢰성이있는이 버전을 사용할 수있을 것으로 기대하지 않습니다. 아마도 소스 제어 시스템이나 그와 비슷한 버전에서 자신의 버전을 기반으로하는 것이 더 좋습니다. 실제로
자동 생성 된 빌드 번호에서 날짜/시간을 계산할 수 있다고하더라도 나는 추천하지 않습니다. 빌드 번호는 그 목적을위한 것이 아닙니다. 이는 단순히 지속적으로 증가하기 위해 의존 할 수있는 자동 생성 값을 의미합니다. 더 이상 로직을 소비하는 어플리케이션으로 가정해서는 안됩니다. 버전 번호 조각에 날짜/시간 스탬프를 포함 시키려면 해당 논리를 빌드 프로세스/스크립트에 통합해야합니다. 그렇지 않으면 그렇게 할 수도 있습니다. 년 | | 월 | 일 | BuildCounter |
내가 논리를 작성한다는 것을 어떻게 알 수 있습니까? 아마도 저는 DLL을보고있을 때 DLL을 가장 잘 추측하려고합니다. –
둘 다 가질 수 있습니다. 예 : 170504는 증가하는 숫자이고 YYMMDD 날짜입니다. 당신은 한 발자국 올리지는 못하지만, 그럴 필요는 없다는 것을 알 수 있습니다. – tenpn
나는 내 어셈블리가있는 AssemblyInfo.cs
우리는 버전에 대해 다음과 같은 형식을 사용에 UpdateVersion를 호출에 PostBuild 스크립트를 사용합니다.
업데이트 버전은 오픈 소스이므로 수정할 수 있습니다.
저는 현재 날짜와 각 빌드가 증가한 카운터를 사용하도록 수정했습니다.
이 방법은 버전 번호가 항상 변경되므로 버전 번호에서 날짜를 파생시킬 수 있습니다.
실제로 매우 편리합니다.
이전 게시물이지만 빌드시 버전 번호를 업데이트하기위한 또 다른 (쉬운) 옵션이 제공됩니다. MSBUILD RegexTransform 단계를 사용하여 버전 번호를 수정했습니다. 다음은이 기능을 구현해야 할 때 자주 돌아가는 게시물입니다.
기본적으로, 당신의 MSBUILD의 PROJ 파일에 당신은 당신의 어셈블리 정보 파일을 변환 만듭니다. 같은 뭔가 :
로슬린 및 .NET 코어에서msbuild myBuild.proj /p:Configuration="%config%" /p:build_number="%version%"
, 컴파일러 소스 코드를 사용할 수 있습니다 : BUILD_NUMBER 외부에서 공급되는
<ItemGroup>
<RegexTransform Include="$(SolutionRoot)\CommonAssemblyInfo.cs">
<Find>(?<major>\d+)\.(?<minor>\d+)\.\d+\.(?<revision>\d+)</Find>
<ReplaceWith>$(BUILD_NUMBER)</ReplaceWith>
</RegexTransform>
</ItemGroup>
.
파일 roslyn/src/Compilers/Core/Portable/VersionHelper.cs
(https://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/Portable/VersionHelper.cs이 - 4f44984 on 2016-04-19 커밋에서) 방법 GenerateVersionFromPatternAndCurrentTime
원래 csc
에서 같은 날짜의 논리가 않습니다
int revision = (int)time.TimeOfDay.TotalSeconds/2;
// 24 * 60 * 60/2 = 43200 < 65535
Debug.Assert(revision < ushort.MaxValue);
// ...
TimeSpan days = time.Date - new DateTime(2000, 1, 1);
int build = Math.Min(ushort.MaxValue, (int)days.TotalDays);
return new Version(pattern.Major, pattern.Minor, (ushort)build, (ushort)revision);
그러나 문서 주석 단순히 "시간 기반 값"없는 말 어떻게 생성되는지에 대해 구체적입니다.
는 그러나 참으로, 지금까지 Build
은 2000-01-01부터 계속 일이며 Revision
는 반 자정 이후의 초 수입니다.
흥미롭게도,이 동작 정의와 VersionHelperTests.cs
에서 테스트 케이스에을 확인 : https://github.com/dotnet/roslyn/blob/614299ff83da9959fa07131c6d0ffbc58873b6ae/src/Compilers/Core/CodeAnalysisTest/VersionHelperTests.cs
- 1. Vb에서 그레고리력을 Hijri 날짜로 변환 할 수 있습니까?
- 2. 문자열을 날짜로 변환
- 3. 문자열을 날짜로 변환
- 4. 문자열을 날짜로 변환 할 때 오류가 발생합니다.
- 5. 이상한 .Net 어셈블리 오류를로드 할 수 없습니다
- 6. 캘린더 - 요일을 날짜로 변환
- 7. mySQL에서 날짜로 varchar로 변환
- 8. Java : 문자열을 날짜로 변환
- 9. 리팩터링 속도 : 날짜로 변환
- 10. 문자열에서 날짜로 변환 할 때의 문제
- 11. 최대 절전 모드/Java 개체를 날짜로 변환 할 수 없습니다.
- 12. GWT에서 문자열을 날짜로 변환
- 13. DateTime 날짜로 변환
- 14. 문자열을 Access에서 날짜로 변환
- 15. 어떻게 NSString을 NSDate로 변환 할 수 있습니까?
- 16. 시스템 .LinQ.Iqueryable (날짜)을 날짜로 변환 할 수 없습니다.
- 17. PostgreSQL - 오류 : "date"열을 입력 날짜로 변환 할 수 없습니다.
- 18. iPhone에서 문자열을 날짜로 변환 할 때 문제가 있습니까?
- 19. .NET 어셈블리
- 20. 문자열을 형식이 지정된 날짜로 변환
- 21. Wix 3.5에서 .NET DLL의 어셈블리 버전을 설정하는 방법은 무엇입니까?
- 22. 어셈블리 버전을 다른 CLR/GAC로 리디렉션
- 23. 혼란을 해결하는 .NET 어셈블리
- 24. 어떻게 든 Visual Studio 버전을 업그레이드하지 않고 .NET 버전을 업그레이드 할 수 있습니까?
- 25. 해당 버전을 설치하지 않고 .NET 버전을 사용하여 빌드 할 수 있습니까?
- 26. .NET 어셈블리를 어떻게 패치 할 수 있습니까?
- 27. 그레고리력을 하이저 리 날짜로 변환
- 28. COM DLL을 .NET DLL로 변환 할 수 있습니까?
- 29. gemfile에서 보석 버전을 제거 할 수 있습니까?
- 30. Java를 사용하여 어셈블리 버전 (DLL)을 검색 할 수 있습니까?
진드기? '새로운 DateTime (긴 ticks)' –
당신이 의미하는 것을 보여줄 수 있습니까? – CesarGon
* gtes가 현재 날짜/시간과 관련되어 있다는 것을 어디에서 알게 되었습니까? – David