Delphi XE 사용자 정의 빌드 대상은 항상 비활성화되어 있습니다
.targets
IDE를 통해 Delphi XE 프로젝트에 포함 된 사용자 정의 MSBuild 파일을 작성 하고 프로젝트 관리자의 상황에 맞는 메뉴에서 활성화했습니다. 파일의 유효성이 검사되지만 프로젝트 파일을 다시 저장 한 후에는 항상 비활성화됩니다.
다음은 이름이 지정된 대상 파일의 단순화 된 버전입니다 Custom.targets
.
<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<Target Name="Hello">
<Message Text="Hello from custom target"/>
</Target>
</Project>
독립형 파일로서 이것은 예상대로 작동합니다 : 입력 ...
MSBuild Custom.target /t:Hello
... 명령 행에 예상되는 메시지가 표시됩니다.
Custom.targets
IDE를 통해 Delphi 프로젝트에 추가하면 예상대로 프로젝트 관리자에 파일이 표시되고 파일에 .dproj
이제 줄이 포함됩니다.
<TargetsFile Include="Custom.targets"/>
IDE의 프로젝트 관리자에서 파일을 마우스 오른쪽 버튼으로 클릭하고을 선택했습니다 Enable
. 그러나 프로젝트가 빌드되면 Build
메시지 창이 표시됩니다.
[MSBuild 경고] Custom.targets (1) : 비활성화 된 가져 오기 무시 :
PathToProjectSource\\Custom.targets
프로젝트 관리자에서 마우스 오른쪽 버튼을 다시 클릭하면 여전히 Enable
예상 옵션 대신 옵션이 표시 됩니다 Disable
.
명령 행 MSBuild ProjectName.dproj /t:Hello
에서도 실패합니다.
.dproj
줄을 추가하기 위해 파일을 해킹하려고 시도했습니다 ...
<Import Project="Custom.targets"/>
타이핑이 MSBuild ProjectName.dproj /t:Hello
이제 작동합니다. 그러나 다음에 IDE에서 프로젝트 파일을 저장하면 <Import>
명령문이 제거됩니다.
아무도 무슨 일이 일어나고 있는지 알고 있습니까?
Delphi는 전체 dproj 컨텐츠 자체를 생성하며이 사용자 정의 가져 오기는 항상 삭제됩니다.
자신의 msbuild xml 파일을 작성할 수 있지만 dproj는 Delphi에 속합니다.
소스 코드가 없거나 원숭이 패치를 기꺼이 적용하지 않는 한 그렇게 할 수 없습니다.
델파이 프로젝트를 빌드하고 많은 목표를 생성하는 유연한 XML 방법을 원한다면 vnext (비트 버킷의 포크)를 사용해보십시오.
IDE에서 컴파일 할 때 적용 한 구성과 대상 (프로젝트에서 클릭 한 것이 있습니까? 또는 활성화 된 타겟? 맞춤형 타겟이 활성화 된 시각적 힌트를 얻지 못함).
나는 보통 Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets"
IDE 이전에 보이지 않기 때문에 (존재하지만 개발자에게는 숨겨져 있기 전에) 그렇게한다.
예를 들어, Delphi XE4 프로젝트는 다음과 같이 끝납니다.
<Import Project="..\BuildServer.Targets"/>
<Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets" Condition="Exists('$(BDS)\Bin\CodeGear.Delphi.Targets')"/>
<Import Project="$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj" Condition="Exists('$(APPDATA)\Embarcadero\$(BDSAPPDATABASEDIR)\$(PRODUCTVERSION)\UserTools.proj')"/>
</Project>
내 .targets 파일은 조건이있는 사용자 정의 "PropertyGroup"및 "Target"을 정의하므로 MSBuild에서 호출 될 때만 적용됩니다.
<PropertyGroup Condition="'$(Config)'=='CustomConfig'">
<DCC_Define>RELEASE;$(DCC_Define)</DCC_Define>
...
</PropertyGroup>
<Target Name="DisplayProjectInfo">
<Message Text="Project File Name = $(MSBuildProjectFile)"/>
<Message Text="Version = $(VerInfo_Keys)"/>
<Message Text="OutputDir = $(DCC_ExeOutput)"/>
</Target>
<Target Name="CustomTarget" Condition="'$(Config)'=='CustomConfig'">
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Clean" />
<MSBuild Projects="$(MSBuildProjectFile)" Targets="Build" />
<CallTarget Targets="DisplayProjectInfo"/>
</Target>
그런 다음 다음을 사용하여 컴파일하십시오.
msbuild /t:CustomTarget /p:config=CustomConfig poject.dproj
이 방법을 사용하면 빌드 대상을 사용자 정의하여 모든 사람이 변경 한 사항에 영향을받지 않고 모든 애플리케이션이 올바른 설정을 갖도록 할 수 있습니다.
참고 URL : https://stackoverflow.com/questions/18575434/delphi-xe-custom-build-target-is-always-disabled
'Programing' 카테고리의 다른 글
Premiere Pro의 ExtendScript 연결을 사용하여 가져온 파일을 시퀀스에 추가 (0) | 2020.05.21 |
---|---|
기존 JNDI HornetQ 서비스를 HA로 만드는 단계는 무엇입니까? (0) | 2020.05.21 |
JavaScript에 대한 코딩 표준이 있습니까? (0) | 2020.05.21 |
프래그먼트를 사용할 때 Android Navigation Drawer 이미지와 Up caret 간 전환 (0) | 2020.05.21 |
GHC가 확실하게 수행 할 수있는 최적화 방법은 무엇입니까? (0) | 2020.05.21 |