사용자 지정 대상을 csproj 파일에 추가한다고 가정합니다. Visual Studio에서 해당 타겟을 실행할 수 있습니까? 나는 그것을 prebuild 또는 postbuild 단계로 만들고 싶지 않다, 나는 단지 Visual Studio에서이 타겟 (및 의존성)을 실행할 수 있기를 원한다.VisualStudio에서 사용자 지정 msbuild 대상 실행
답변
사용자 정의 외부 도구를 사용하는 간단한 방법 (만족스럽지는 않지만)이 있습니다. | 도구
<Target Name="CalledFromIde">
<Error Text="Called from the IDE!" />
</Target>
이동 : 프로젝트 파일을 가정
는다음 수정을가 외부 도구와 같은 하나를 추가 :
Title: Called from IDE
Command: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe
Arguments: $(ProjectDir)$(ProjectFileName) /t:CalledFromIde
Initial directory: $(ProjectDir)
Use Output window: checked
는이 출력을 생성 실행 등 :
Build FAILED.
"F:\Code\CsProject\CsProject.csproj" (CalledFromIde target) (1) ->
(CalledFromIde target) ->
F:\Code\CsProject\CsProject.csproj(57,5): error : Called from the IDE!
당신이 외부 도구로의 MSBuild에게 전화하고 직접 목표를 실행하는 데하고 있습니다. IDE는 생성 된 빌드 환경과 동일한 속성을 유지하지 않으므로 MSBuild의 전체 경로를 제공해야합니다.
설정 도구 #ExternalCommand #에있는 명령 번호를 파악하여 바로 가기에 연결할 수 있습니다.
더 세련된 솔루션을 찾고 있다면 좀 더 복잡합니다. (VS2010의 경우)
1) VS Addin (파일 | 새 프로젝트 | 기타 프로젝트 유형 | 확장 성 | Visual Studio 추가 기능)을 만듭니다. 이 기능을 사용하려면 VS SDK를 설치해야하는지 잘 모르겠지만 확장 관리자에서 사용할 수 있습니다.
마법사에서 다음 옵션 선택 : - 마이크로 소프트 비주얼 스튜디오 2010 - 응용 프로그램이 을 시작할 때로드 - - 예, '도구'메뉴 항목 을 만들 내 추가 기능은 모달 UI를 두지 않을 것이며, 명령 줄 빌드와 함께 사용할 수 있습니다.
2))을 Connect.cs에서 Exec에서의 구현
4 파일 찾기) Microsoft.Build 및
3 Microsoft.Build.Framework
에 대한 참조를 추가 코드로 교체 :public void Exec(
string commandName,
vsCommandExecOption executeOption,
ref object varIn,
ref object varOut,
ref bool handled)
{
handled = false;
if (executeOption != vsCommandExecOption.vsCommandExecOptionDoDefault)
return;
if (commandName != "BuildAddin.Connect.BuildAddin")
return;
var doc = _applicationObject.ActiveDocument;
var projectItem = doc.ProjectItem;
var project = projectItem.ContainingProject;
var evalProject =
Microsoft.Build.Evaluation.ProjectCollection
.GlobalProjectCollection.LoadProject(project.FullName);
var execProject = evalProject.CreateProjectInstance();
bool success = execProject.Build("CalledFromIde", null);
var window = _applicationObject.Windows.Item(Constants.vsWindowKindOutput);
var output = (OutputWindow)window.Object;
OutputWindowPane pane = output.OutputWindowPanes.Add("BuildAddin");
pane.OutputString(success ? "built /t:CalledFromIde" : "build failed");
handled = true;
return;
}
5) 디버깅하는 동안 더 나은 사용자 정의 대상, 이후 이전 오류 :
<Target Name="CalledFromIde">
<WriteLinesToFile File="CalledFromIde.txt" Lines="Called from the IDE!" />
</Target>
6) 위 코드는 간결함을 검사하는 오류가 없으므로 IDE에서 실행되기 때문에 훨씬 더 명확 해지기를 원할 것입니다. 추가 기능은 도구 메뉴에 메뉴 항목을 배치합니다. 위에서 설명한 것처럼, 현재 활성화 된 편집기 문서가 포함 된 프로젝트를 찾고 있습니다.이 문서는 요리중인 내용에 대해 더 나은 배관 작업이 필요할 것입니다.
이 기술은 IDE 내에서 빌드 엔진 인스턴스를 가져 와서 프로젝트의 별도 인스턴스에서 빌드를 실행합니다.
Exec을 코딩 할 필요는 없습니다. 그러나 그렇게하는 것이 하나의 방법입니다.
이사용자 정의에 DefaultTargets="Build"
속성이 생성 대상 변경,과 같이 "All"
말 :
DefaultTargets="All"
그런 다음 사용자 정의 "모든"대상에, 당신은 DependsOnTargets를 사용할 수있는 쉬운 방법은 다음을 수행하는 것입니다 다음 구축 할 것입니다
"<Target Name="All" DependsOnTargets="ZipOutputFiles;Build">
</Target>"
이를 밖으로 사용자 정의 "All"
대상에 zip 파일을 넣어 다음과 같은 속성.
Visual Studio에서 빌드를 실행중인 경우 빌드 중에 VisualStudioDir 빌드 변수가 있습니다. 세션을 VS를 구축 할 경우에만 실행하려면
이 작업을 수행 :
<Target Name="Test" BeforeTargets="Build" Condition="'$(VisualStudioDir)' != ''>
</Target>
는 외부 VS의 빌드에서 실행하려면 다음을 수행
<Target Name="Test" BeforeTargets="Build" Condition="'$(VisualStudioDir)' == ''>
</Target>
당신은 사용자 정의 목표 파일을 포함해야합니다 두 가지 방법 중 하나로
- 설정 환경 변수 CustomBeforeMicrosoftCommonTargets
편집하면 가져 오기
<Imports Project="CustomBuildTasks.Targets"><Imports/>
- 1. MSBuild 사용자 지정 공통 대상
- 2. msbuild 사용자 지정 작업
- 3. "마지막으로"MSBuild 대상
- 4. 종속성이있는 사용자 지정 MSBuild 작업
- 5. MSBuild 대상 건너 뛰기
- 6. MSBuild 대상 후크 만들기
- 7. 사용자 지정 대상 경로가있는 문제
- 8. Silverlight에서 다중 바인딩으로 사용자 지정 대상 지정
- 9. 다른 사용자 지정 MSBuild 작업을 사용하는 사용자 지정 MSBuild 작업 작성
- 10. 솔루션을 만든 후에 MsBuild 작업 (대상?)을 실행 하시겠습니까?
- 11. 사용자 지정 MSbuild 작업의 필수 태그
- 12. IronPython/SharpDevelop 3.1의 MSBuild 사용자 지정 작업
- 13. 사용자 지정 MSBuild 작업에서 어셈블리 참조 전달
- 14. 사용자 지정 msbuild 작업 구성 문제
- 15. 사용자 지정 MSBuild 작업 잠금 어셈블리
- 16. MSBuild - 대상 종속 가져 오기
- 17. Xcode 4 사용자 지정 대상 추가
- 18. 사용자 지정 NSControl 대상/동작 howto!
- 19. MsBuild를 사용하여 사용자 지정 MsDeploy 매니페스트 생성 (패키지 대상)
- 20. 허드슨에서 사용자 지정 스크립트 실행
- 21. cygwin - 스위치가있는 msbuild 실행
- 22. VisualStudio에서 디버깅 확인
- 23. 로거의 이벤트를 통해 MSBuild 사용자 지정 작업 속성 읽기
- 24. MSBuild CoreCompile 대상 참조 어셈블리 식별 방법
- 25. 다른 빌드 유형에 대한 MSBuild 대상 재사용
- 26. MSBuild - 명령 줄에서 호출되는 대상 얻기
- 27. MSBuild : 하위 빌드의 플랫폼 지정 문제
- 28. 업데이트 대상 지정 게시판
- 29. MSBuild : 사용자 지정 작업을 작성하고 호출하지만 MSBuild에서 TaskFactory가 필요하다고 생각합니다.
- 30. 예약 msbuild 태스크 야간 실행