귀하의 요구 사항은 git.exe
에 의존하지 않아야합니다. 그러나 Visual Studio에서 사용하는 라이브러리 인 LibGit2Sharp를 사용하고 Visual Studio와의 통합을 원할 경우 이와 같은 미친 짓을 할 수 있습니다.
프로젝트 파일에 새 타겟을 추가하십시오. 나는 당신이 그렇게 이것이하는 일은 "HelloGit.cs"에 대한 현재 프로젝트 디렉토리를 보면입니다
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<CodeFile>$(MSBuildProjectDirectory)\HelloGit.cs</CodeFile>
<CodeFileText>$([System.IO.File]::ReadAllText("$(CodeFile)"))</CodeFileText>
<CodeFileText>$([MSBuild]::Unescape("$(CodeFileText)"))</CodeFileText>
</PropertyGroup>
<UsingTask TaskName="HelloGit" TaskFactory="CodeTaskFactory" AssemblyFile="$(MSBuildToolsPath)\Microsoft.Build.Tasks.Core.dll">
<ParameterGroup>
<Sha1 ParameterType="System.String" Required="False" Output="True" />
<Repository ParameterType="System.String" Required="True" Output="False" />
</ParameterGroup>
<Task>
<Reference Include="System.Xml, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" />
<Reference Include="C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\CommonExtensions\Microsoft\TeamFoundation\Team Explorer\LibGit2Sharp.dll" />
<Using Namespace="System" />
<Using Namespace="System.IO" />
<Code Type="Class" Language="cs">
$(CodeFileText)
</Code>
</Task>
</UsingTask>
<Target Name="RunTask" AfterTargets="BeforeBuild">
<HelloGit Repository="$(MSBuildProjectDirectory)">
<Output TaskParameter="Sha1" PropertyName="CommitId" />
</HelloGit>
<Warning Text="Your commit is: $(CommitId)" />
</Target>
후 csproj에 추가 C#을 사용하는 가정하고 있습니다. 그 내용은 다음과 같습니다 ...
인라인 코드 작업 (예 : XML 내부의 C# 포함)으로 수행 할 수 있지만 작업이 상당히 길어서 VS 코드에서 별도의 파일로 편집하고 싶습니다.
using System;
using System.Collections.Generic;
using System.Linq;
using System.Reflection;
using System.Runtime.CompilerServices;
using System.Text;
using LibGit2Sharp;
using Microsoft.Build.Framework;
using Microsoft.Build.Utilities;
namespace GitIntrospection {
public class HelloGit : Task {
public override bool Execute() {
AppDomain.CurrentDomain.AssemblyResolve += (sender, args) => {
if (args.Name.Contains("LibGit2Sharp")) {
return Assembly.LoadFrom("C:\\Program Files (x86)\\Microsoft Visual Studio 14.0\\Common7\\IDE\\CommonExtensions\\Microsoft\\TeamFoundation\\Team Explorer\\LibGit2Sharp.dll");
}
return null;
};
GetCommit();
return !Log.HasLoggedErrors;
}
// [MethodImpl(MethodImplOptions.NoOptimization | MethodImplOptions.NoInlining)]
private void GetCommit() {
Repository repository = new Repository(Repository);
this.Sha1 = repository.Commits.First().Id.Sha;
}
[Output]
public string Sha1 { get; set; }
[Required]
public string Repository { get; set; }
}
}
이제 프로젝트를 빌드하면 최신 커밋이 추출되어 경고로 기록됩니다. 이것은 Visual Studio와 MS Build 내부에서 작동합니다.
결과도 git.exe
에 동의하는 것 비주얼 스튜디오 내부의 명령 줄
작품에
작품 ... 그
대체 편리합니다 1 당신 git.exe
과만 사용할 수 있습니다.작업!
대체 2 PowerShell을 사용하여 LibGit2Sharp 어셈블리를로드하고 동일한 방법을 호출 할 수 있습니다.
실제로 에서 출력을 얻는 것은 오류 처리가 포함 된 경우에도 * way *가 더 간단합니다. –
stijn
@stijn 그래도 git.exe가 필요합니다. – Jez
네, 그렇습니다.하지만, 요즘 요구 사항으로 설치되어있는 git를 사용하는 것은 드문 일이 아닙니다. 왜냐하면 afaik가 모든 단일 git 기능을 VS에서 구현하지 않기 때문입니다. – stijn