제목이 다소 설명력이 있기를 바랍니다.디자인 타임에 빌드 날짜가 자동으로 삽입되도록하려면 어떻게합니까?
나는 C#에서 .net 2.0으로 작성된 winform 응용 프로그램이 있습니다. about 상자와 초기 스플래시 상자에서 사용할 변수에 자동으로 마지막 컴파일 날짜를 업데이트하고 싶습니다. 현재 수동으로 업데이트하는 문자열 변수가 있습니다. 이 일을 할 수있는 방법이 있습니까?
VS2008 2.0 C#을
제목이 다소 설명력이 있기를 바랍니다.디자인 타임에 빌드 날짜가 자동으로 삽입되도록하려면 어떻게합니까?
나는 C#에서 .net 2.0으로 작성된 winform 응용 프로그램이 있습니다. about 상자와 초기 스플래시 상자에서 사용할 변수에 자동으로 마지막 컴파일 날짜를 업데이트하고 싶습니다. 현재 수동으로 업데이트하는 문자열 변수가 있습니다. 이 일을 할 수있는 방법이 있습니까?
VS2008 2.0 C#을
또 다른 트릭 (사용하지 못할 수 있음)은 .NET에서 생성 된 자동 빌드 및 수정 번호를 활용하는 것입니다. AssemblyInfo에있는 경우 :
[assembly: AssemblyVersion("1.0.*")]
마지막 두 숫자는 날짜/시간 스탬프입니다. 일부 코드 (아래 목록) 도움이 될 수
Version v = Assembly.GetExecutingAssembly().GetName().Version;
DateTime compileDate = new DateTime((v.Build - 1) * TimeSpan.TicksPerDay + v.Revision * TimeSpan.TicksPerSecond * 2).AddYears(1999);
더 붙박이 매크로 나이 비슷한 없다 .NET. 최선의 방법은 tigris, Time
작업 및 RegexReplace
또는 그와 유사한 사용자 지정 빌드 태스크 일 수 있습니다. 옳다는 것은 간단하지 않습니다. 개인적으로 저장소 버전을 사용하여 AssemblyInfo를 업데이트합니다 - 광범위하게 관련이 있습니까?
<Import Project="$(MSBuildExtensionsPath)\MSBuildCommunityTasks\MSBuild.Community.Tasks.Targets"/>
...
<SvnInfo LocalPath=".">
<Output TaskParameter="Revision" PropertyName="BuildRev" />
</SvnInfo>
<FileUpdate Files="protobuf-net\Properties\AssemblyInfo.cs"
Regex='(\[\s*assembly:\s*AssemblyVersion\(\s*"[^\.]+\.[^\.]+)\.([^\.]+)(\.)([^\.]+)("\)\s*\])'
ReplacementText='$1.$2.$(BuildRev)$5' />
나는이 방법이 소스 파일을 변경해서는 안되기 때문에 동의하지 않는다. – MarkPflug
내가 codeproject.com에서 this about box을 사용 : 여기에 내가 넣어 것보다 따라하기 좀 명확하게 수있는 대안 대답. 2004 년 Jeff Atwood가 실제로 작성했습니다. 어셈블리 파일에서 날짜 스탬프를 보거나 어셈블리 버전에서 계산하여 컴파일 시간을 계산합니다. 아마도 거기에서 관련 코드를 추출 할 수 있습니다.
미리 빌드 이벤트에이를 팝하십시오.
echo public static class DateStamp { public readonly static System.DateTime BuildTime = System.DateTime.Parse("%date%"); } > $(ProjectDir)DateStamp.cs
이렇게하면 DateStamp라는 클래스가 만들어집니다.
public static class DateStamp
{
public readonly static System.DateTime BuildTime = System.DateTime.Parse("14/12/2009");
}
그리고 이렇게하면됩니다.
Console.WriteLine("Build on " + DateStamp.BuildTime.ToShortDateString());
빌드하기 전에 "DateStamp"를 어떻게 인식합니까? 오류가 발생했습니다 ... 'DateStamp'이름이 현재 컨텍스트에 존재하지 않습니다. – Brad
아, 맞습니다. 파일 (DateStamp.cs)은 프로젝트의 루트 폴더에 있습니다. VS에서는 솔루션 탐색기로 이동하여 현재 프로젝트에없는 파일을 포함하여 모든 파일을 표시하는 버튼을 클릭합니다. DateStamp.cs를 찾아 마우스 오른쪽 단추로 클릭하고 '프로젝트에 포함'을 선택하십시오. 이제 프로젝트의 일부로 빌드 된 것을 발견해야합니다. –
이것은 너무 늦어 유용하지 않을 수 있지만 다른 사람에게 도움이 될 수 있습니다.
당신은 당신의 csproj 파일이 대상을 추가 할 수 있습니다, 그냥 말을에 붙여 넣습니다
<Target Name="BuildDate" BeforeTargets="CoreCompile">
<PropertyGroup>
<SharedAssemblyInfoFile>$(IntermediateOutputPath)CustomAssemblyInfo.cs</SharedAssemblyInfoFile>
</PropertyGroup>
<ItemGroup>
<Compile Include="$(SharedAssemblyInfoFile)" />
</ItemGroup>
<ItemGroup>
<AssemblyAttributes Include="AssemblyMetadata">
<_Parameter1>AssemblyDate</_Parameter1>
<_Parameter2>$([System.DateTime]::UtcNow.ToString("u"))</_Parameter2>
</AssemblyAttributes>
</ItemGroup>
<WriteCodeFragment Language="C#" OutputFile="$(SharedAssemblyInfoFile)" AssemblyAttributes="@(AssemblyAttributes)" />
</Target>
이 한 행을 포함하여 "OBJ"폴더에 CustomAssemblyInfo.cs 파일을 생성합니다 : [assembly: AssemblyMetadata("AssemblyDate", "DATE_OF_BUILD_HERE")]
이 파일은 어셈블리로 컴파일됩니다, 그래서 당신은 다음 코드에서와 같이 반사를 사용하여 런타임에 액세스 할 수 있습니다 :
using System;
using System.Linq;
using System.Reflection;
public class Application
{
static DateTime BuildDate;
public static DateTime GetBuildDate()
{
if (BuildDate == default(DateTime)) {
var attr = typeof(Application).Assembly.GetCustomAttributes<AssemblyMetadataAttribute>();
var dateStr = attr.Single(a => a.Key == "AssemblyDate")?.Value;
BuildDate = DateTime.Parse(dateStr);
}
return BuildDate;
}
}
한 가지주의해야 할, 내가 여기에 사용하고있어 만했다 AssemblyMetadataAttribute 추가 된 .NET 4.5.3이므로 이전 버전을 지원해야하는 경우 날짜 값을 보유 할 고유 한 사용자 정의 속성 유형을 간단히 정의 할 수 있습니다.
주의! 이 코드는 윤년 때문에 2012 년 3 월 11 일에 무언가를 만들 때 작동하지 않습니다. 3 월 11 일 대신 3 월 12 일을 반환합니다. – JYL