ডেল্ফি XE কাস্টম বিল্ড লক্ষ্য সর্বদা অক্ষম থাকে


177

আমি একটি কাস্টম এমএসবিল্ড .targetsফাইল তৈরি করেছি যা আমি আইডিইয়ের মাধ্যমে একটি ডেলফি এক্সই প্রকল্পে অন্তর্ভুক্ত করেছি এবং এটি প্রকল্প পরিচালকের প্রসঙ্গ মেনু থেকে সক্ষম করে রেখেছি। যদিও ফাইলটি বৈধতা দেয়, আমি প্রকল্প ফাইলটি পুনরায় সংরক্ষণ করার পরে এটি সর্বদা অক্ষম হয়ে যায়।

এখানে লক্ষ্যমাত্রা ফাইলের একটি সরলীকৃত সংস্করণ, নামে এর 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আইডিইর মাধ্যমে একটি ডেলফি প্রকল্পে যুক্ত করা প্রত্যাশা অনুযায়ী প্রকল্প পরিচালককে ফাইলটি প্রদর্শন করে এবং .dprojফাইলটিতে এখন লাইন রয়েছে ...

<TargetsFile Include="Custom.targets"/>

আমি আইডিইর প্রজেক্ট ম্যানেজারে ফাইলটি ডান-ক্লিক করে নির্বাচন করেছি Enable। কিন্তু যখন প্রকল্পটি নির্মিত হয় Buildবার্তা উইন্ডোটি প্রদর্শন করে:

[এমএস বিল্ড সতর্কতা] কাস্টম.আর্টেজ (1): অক্ষম আমদানি উপেক্ষা: PathToProjectSource\\Custom.targets

প্রজেক্ট ম্যানেজারটিতে আবার ডান ক্লিক করা Enableপ্রত্যাশার পরিবর্তে বিকল্পটি দেখায় Disable

কমান্ড লাইনেও MSBuild ProjectName.dproj /t:Helloব্যর্থ হয়।

আমি .dprojলাইন যুক্ত করার জন্য ফাইলটি হ্যাক করার চেষ্টা করেছি ...

<Import Project="Custom.targets"/>

টাইপিং MSBuild ProjectName.dproj /t:Helloএখন কাজ করে। কিন্তু পরের বার আইডিই থেকে প্রজেক্ট ফাইলটি সংরক্ষণ করি <Import>বিবৃতিটি সরিয়ে ফেলা হবে।

ভুল হয়েছে কি কারও ধারণা আছে দয়া করে?


10
কমান্ডলাইন থেকে মিসবিল্ড ব্যবহারের উদাহরণে আপনি অন্য কোথাও কাস্টম.আর্টেজ ব্যবহার করার সময় কাস্টম.আরগারেট দেখান । ইহা কোনটা?
কেনেথ কোচরান

4
ভাল স্পট - আমি কোডের দিকে প্রচুর ঘোর সত্ত্বেও লক্ষ্য করি নি। আমি কিছু দিন (হাসপাতালে!) এর উপরে ডেলফি নিয়ে কোনও মেশিনে উঠতে পারি না, তবে যখনই আমি পারব নিয়মিত "টার্গেট" বা "লক্ষ্য" ব্যবহার করে কোডটি চেষ্টা করব।
delphidabbler

6
একটি ডেল্ফি ব্যবহারকারী নয়, তবে এই সমস্ত। টার্গেটস ফাইল অনুসারে ত্রুটিমুক্ত বৈধ এমএসবাইল্ড স্ক্রিপ্ট থাকতে হবে। যদি ফাইলটির কোনও ত্রুটি থাকে তবে আপনাকে অবহিত করা হবে এবং, যদি প্রকল্পটি অবৈধ tar ডাবল চেক করার উপযুক্ত হতে পারে যা আপনার লক্ষণগুলির ব্যাখ্যা করে।
ড্যানিয়েল মরিট

দুর্ভাগ্যক্রমে XE7 এ আমি আপনার সমস্যাটি পুনরায় উত্পাদন করতে পারছি না, সবকিছু প্রত্যাশিতভাবে কাজ করবে বলে মনে হচ্ছে: কমান্ড লাইন প্রম্পট থেকে বিল্ডিংয়ের /t:Helloপাশাপাশি আইডিই থেকে প্রজেক্ট ম্যানেজার - টার্গেটস - হ্যালোতে রাইট-ক্লিকের মাধ্যমে বিল্ডিং । আমি Custom.targetsপ্রকল্প পরিচালক - অ্যাড - (ফাইলের জন্য ব্রাউজ করা) - এ ডান-ক্লিক করে প্রকল্পে যুক্ত করেছি । পাথটি .dproj ফাইলের মতো একই ডিরেক্টরি।
ওন্দ্রেজ কেল্ল

উত্তর:


1

ডেল্ফি নিজেই পুরো ডিপিপ্রজ সামগ্রী তৈরি করে এবং এই কাস্টম আমদানি সর্বদা মুছে ফেলা হবে।

আপনি নিজের এমএসবিল্ড এক্সএমএল ফাইল লিখতে পারেন তবে ডিপ্রিজ ডেলফির অন্তর্গত।

আপনার সোর্স কোড না থাকলে বা বানরের আদর্শের প্যাচ করতে ইচ্ছুক না হলে আপনি এটি করতে পারবেন না।

আপনি যদি ডেলফি প্রকল্পগুলি তৈরি করতে এবং লক্ষ্যগুলি তৈরি করার জন্য একটি নমনীয় এক্সএমএল উপায় চান তবে ভেনেক্সট (বিটবাকেটে আমার কাঁটাচামচ) চান বা চেষ্টা করুন


1

আমি লক্ষ্যবস্তু ফাইলটি ম্যানুয়ালি অন্তর্ভুক্ত করব এবং আইডিইর পরিবর্তে এমএসবাইল ব্যবহার করে বাহ্যিকভাবে নির্মাণ করব, কারণ আইডিই থেকে সংকলন করার সময় আপনি কোন কনফিগারেশন এবং লক্ষ্যটি প্রয়োগ করেছেন তা জানতে কিছুটা বিচলিত হবে (প্রকল্পটিতে ক্লিক করা একটি? বা একটি থেকে সক্ষম টার্গেট? আপনি কোনও কাস্টম টার্গেট সক্ষম করে এমন কোনও ভিজ্যুয়াল ইঙ্গিত পাবেন না)।

আমি সাধারণত এটি করার আগে Import Project="$(BDS)\Bin\CodeGear.Delphi.Targets"তাই তারা আইডিইতে প্রদর্শিত হবে না (তাদের উপস্থিত রয়েছে, তবে তারা বিকাশকারীদের কাছে গোপন রয়েছে)।

উদাহরণস্বরূপ আমার ডেলফি এক্সই 4 প্রকল্পগুলি এর সাথে শেষ হয়:

    <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  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

এই পদ্ধতির ব্যবহারের ফলে আপনি প্রতিটি লক্ষ্য কারও দ্বারা পরিবর্তিত প্রভাব দ্বারা প্রভাবিত না হয়ে সঠিক সেটিংস সঠিকভাবে পায় তা নিশ্চিত করতে বিল্ড টার্গেটগুলি কাস্টমাইজ করতে দেয়।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.