Programing

Delphi XE 사용자 정의 빌드 대상은 항상 비활성화되어 있습니다

lottogame 2020. 5. 21. 08:03
반응형

Delphi XE 사용자 정의 빌드 대상은 항상 비활성화되어 있습니다


.targetsIDE를 통해 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.targetsIDE를 통해 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

반응형