প্রতিটি বিল্ডে টি 4 টেম্পলেট চালানোর জন্য ভিজ্যুয়াল স্টুডিও পান


163

প্রতিটি বিল্ডে এর আউটপুট উত্পন্ন করতে কীভাবে আমি টি 4 টেমপ্লেট পেতে পারি? এখন যেমন আছে, কেবলমাত্র যখন আমি টেমপ্লেটে পরিবর্তন করি তখন এটি পুনরায় জেনারেট করে।

আমি এর মতো অন্যান্য প্রশ্ন পেয়েছি:

টি 4 রূপান্তর এবং ভিজ্যুয়াল স্টুডিওতে বিল্ড অর্ডার (উত্তর ছাড়াই)

ভিজ্যুয়াল স্টুডিওতে টি 4 ফাইলগুলি কীভাবে তৈরি করবেন? (উত্তরগুলি যথেষ্ট পরিমাণে জটিল হওয়ার পরেও বিশদ নয়) এবং এমনকি মোটামুটি বোঝায় না)

এটি করার একটি সহজ উপায় হতে পারে!


যদিও আমি ব্যক্তিগতভাবে এটির উত্তর শুনতে আগ্রহী হব, আপনার বিশেষ দৃশ্যটি কী? সাধারণত টেমপ্লেটের আউটপুট কেবল ইনপুটটির একটি ফাংশন হওয়া উচিত, সুতরাং পরিবর্তনে উত্পন্ন করা ঠিক is
পাভেল মিনায়েভ

6
আমার টেম্পলেটটি অন্যান্য অ্যাসেমব্লিকে পরীক্ষা করতে প্রতিবিম্ব ব্যবহার করে, যা শেষ বিল্ডের পরে পরিবর্তিত হতে পারে।
জোয়েলফ্যান 21

এই ধারণা সম্পর্কে কি: stackoverflow.com/questions/1649649/...
JoelFan

আমার টেম্পলেটটি এক উদ্দেশ্যে কাজ করে, বিল্ডের তারিখের সময়টি রেকর্ড করে।
স্কট সলমার

উত্তর:


68

আমি জোয়েলফ্যানের উত্তরটি ডাব্লু / এইটি প্রকাশ করতে ব্যবহার করেছি। আমার এটি আরও ভাল লেগেছে কারণ প্রতিবার আপনি যখন প্রকল্পে নতুন .tt ফাইল যুক্ত করবেন তখন প্রাক-বিল্ড ইভেন্টটি পরিবর্তন করতে হবে তা মনে রাখবেন না।

  • আপনার পাঠ্য ট্রান্সফর্ম.এক্সে যোগ করুন %PATH%
  • transform_all.bat নামে একটি ব্যাচ ফাইল তৈরি করেছে (নীচে দেখুন)
  • একটি প্রাক-বিল্ড ইভেন্ট তৈরি করুন " transform_all ..\.."

transform_all.bat

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

:: set the working dir (default to current dir)
set wdir=%cd%
if not (%1)==() set wdir=%1

:: set the file extension (default to vb)
set extension=vb
if not (%2)==() set extension=%2

echo executing transform_all from %wdir%
:: create a list of all the T4 templates in the working dir
dir %wdir%\*.tt /b /s > t4list.txt

echo the following T4 templates will be transformed:
type t4list.txt

:: transform all the templates
for /f %%d in (t4list.txt) do (
set file_name=%%d
set file_name=!file_name:~0,-3!.%extension%
echo:  \--^> !file_name!    
TextTransform.exe -out !file_name! %%d
)

echo transformation complete

28
সুন্দর সমাধান। আমি "%CommonProgramFiles%\Microsoft Shared\TextTemplating\1.2\texttransform.exe"ব্যাচ ফাইলে% PATH% এ যুক্ত করার পরিবর্তে টেক্সটট্রান্সফর্ম.এক্সে ( ) এর পুরো পথটি স্থাপন করা পছন্দ করেছি
অ্যাডাম নফসিংগার

20
আরও ভাল চলকটি% COMMONPROGRAMFILES% এর পরিবর্তে% COMMONPROGRAMFILES (x86)% হবে কারণ এটি একটি 64 বিট সিস্টেমেও কাজ করবে।
ডারডেন 8১

3
সুতরাং পুরো পথ হবে %COMMONPROGRAMFILES(x86)%\microsoft shared\TextTemplating\11.0\TextTransform.exe। এটি ডাবল উদ্ধৃতিতে মোড়ানো।
উত্তরবেন

1
@ পাইয়ার্স:: স্ক্রিপ্টটি চালিত ওএসের স্বয়ংক্রিয়ভাবে 'বেনেসিটি' সনাক্ত করার জন্য আমি কোডটি আপডেট করেছি। আমি ওজেক্ট ডিরেক্টরিটি এড়াতে নর্থবেনের মন্তব্যও অন্তর্ভুক্ত করেছি এবং% PATH% পরিবেশ পরিবর্তনশীল পরিবর্তন না করার বিষয়ে অ্যাডাম নফসিংগারের পছন্দকে বাস্তবায়ন করেছি।
অ্যালেক্স এসিলফি

1
আইএমএইচওকে স্তন্যপান দেওয়ার পথ সরবরাহ করতে হবে TextTransform.exe। আপনি ভিজ্যুয়াল স্টুডিওতে ইতিমধ্যে "কাস্টম সরঞ্জাম চালান" রাইট ক্লিক করতে পারেন, সুতরাং এটির ইতিমধ্যে সরঞ্জামটির পথ রয়েছে। আমি যখন ভিজ্যুয়াল স্টুডিও প্রসঙ্গে তৈরি করছি তখন কেন আমাকে আবার এটি সরবরাহ করার কাজটি করতে হবে?
জেজ

70

আমি গ্যারেথজির সাথে একমত - ভিএস 2010 এ প্রতিটি বিল্ডে টিটি টেমপ্লেটগুলি পুনরায় জেনারেট করা অনেক সহজ। ওলেগ সিচের ব্লগ এটি কীভাবে করবেন তা বর্ণনা করে। সংক্ষেপে:

  1. ভিজ্যুয়াল স্টুডিও এসডিকে ইনস্টল করুন
  2. ভিজ্যুয়াল স্টুডিও 2010 মডেলিং এবং ভিজ্যুয়ালাইজেশন এসডিকে ইনস্টল করুন
  3. পাঠ্য সম্পাদক প্রকল্প ফাইলটিতে খুলুন এবং ফাইলের শেষে যুক্ত করুন তবে আগে </Project>

এটাই. আপনার প্রকল্প খুলুন। প্রতিটি বিল্ডে সমস্ত * .tt টেমপ্লেটগুলি পুনরায় প্রসেস করা হবে

<!-- This line could already present in file. If it is so just skip it  -->
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<!-- process *.tt templates on each build  -->
<PropertyGroup>
    <TransformOnBuild>true</TransformOnBuild>
</PropertyGroup>
<Import Project="$(MSBuildExtensionsPath)\Microsoft\VisualStudio\TextTemplating\v10.0\Microsoft.TextTemplating.targets" />

2
এখানে ওলেগ সিচের
বোঝার-

4
এটি একটি খুব সুন্দর সমাধান। তবে এসডিকে ইনস্টল না করে কাজ করার কোনও উপায় আছে কি? আমি .targets ফাইল এবং সম্পর্কিত অ্যাসেম্বলির অনুলিপি করে এটি কাজ করার চেষ্টা করছি, কিন্তু সফলতা ছাড়াই।
গ্রিমাস

3
চিপ্পি কোনও এসডিকে ডাউনলোড না করেই কাজ করছে বলে মনে হচ্ছে ... তবে আপনাকে এখনও চিরপিকে ডাউনলোড এবং কনফিগার করতে হবে। আমি এখনও একটি সমাধান আবিষ্কার করার চেষ্টা করছি যা ভিএস 2010-এর একটি ডিফল্ট ইনস্টল কাজ করে এবং উত্স সংগ্রহস্থলের মাধ্যমে এটি উপলব্ধ হবে যাতে বিকাশকারীদের কেবল এটির কাজ করার জন্য রেপো পরীক্ষা করে দেখতে হবে। এই সমস্ত অন্যান্য সমাধানগুলির জন্য প্রতি বিকাশকারীদের মনোযোগের প্রয়োজন হয়।
মীর

1
আপনি যদি এমএসবাইল্ডের x64 সংস্করণ ব্যবহার করে আপনার প্রকল্পগুলি তৈরি করেন - আপনি এই ত্রুটিটি পাবেন: 'এমএসবি 4019: আমদানি করা প্রকল্প "সি: \ প্রোগ্রাম ফাইলগুলি (x86) \ এমএসবাইল্ড \ মাইক্রোসফ্ট \ ভিজ্যুয়ালস্টুডিও \ টেক্সটমেপ্লেটিং \ v10.0 \ মাইক্রোসফ্ট.টেক্সটেম্পলটিং.আটারজেটস " পাওয়া যায় নি.' ত্রুটি. ওয়ার্কআরাউন্ড - একটি প্রকল্পের ফাইলে $ (এমএসবিল্ড এক্সটেনশনপথ) দ্বারা ভেরিয়েবল (এমএসবিল্ড এক্সটেনশনসপথ 32) প্রতিস্থাপন করুন।
মরিচা পড়েছে

3
তদুপরি, আপনার .csproj ফাইলগুলি প্যাচ করার দরকার নেই। কমান্ড লাইন থেকে অনুরূপ অনুরোধ করুন msbuild mySolution.sln /p:CustomAfterMicrosoftCommonTargets="C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets" /p:TransformOnBuild=true /p:TransformOutOfDateOnly=false
জিউলিও ভায়ান

29

এখানে একটি দুর্দান্ত নিউগেট প্যাকেজ রয়েছে যা কেবল এটি করে:

PM> Install-Package Clarius.TransformOnBuild

প্যাকেজ সম্পর্কে বিশদ এখানে পাওয়া যাবে


2
এখানে একটি 'অফিশিয়াল' কাঁটাচামচ রয়েছে: nuget.org/packages/Clarius.TransforOnBuild-unofficial যা contentবিল্ড অ্যাকশনগুলিকে সমর্থন করে
এরনো

1
এটি দুর্দান্ত এক্সটেনশন তবে এটি কমান্ডলাইন মোডে টেক্সট ট্রান্সফর্ম.এক্সি চলছে, সুতরাং হোস্টস্পেসিফিক = "সত্য" মজাদার কাজ
Gh61

1
@ জেনিশরাবাদিয়া টেমপ্লেটের শীর্ষে এই লাইনটি যুক্ত করুন:<#@ template language="C#" #>
পিটার ভ্যান কেকেম

2
প্যাকেজটি হোস্টস্পেসিফিক = "সত্য" এবং অন্যান্য সমস্যাগুলির সমর্থন করার জন্য আপডেট করা হয়েছে বলে মনে হয় (8 দিন আগে)
মিংগুই স্যামুয়েল

1
কন্টেন্ট বিল্ড অ্যাকশন এখন সর্বশেষতম সংস্করণ সহ কাজ করছে।
androbin

20

আমি মার্কগ্রির উত্তরটি ব্যবহার করেছি এবং এই সমাধানটি বিকাশ করেছি। প্রথমে মূল সমাধান ফোল্ডারের উপরে একটি পৃথক সরঞ্জাম ফোল্ডারে রানটেম্পলেট.বাট নামে একটি ব্যাচ ফাইল তৈরি করুন । ব্যাচ ফাইলটির সবেমাত্র লাইন রয়েছে:

"%CommonProgramFiles%\Microsoft Shared\TextTemplating\1.2\texttransform.exe" -out %1.cs -P %2 -P "%ProgramFiles%\Reference Assemblies\Microsoft\Framework\v3.5" %1.tt

এই ব্যাচ ফাইলটিতে 2 প্যারামিটার লাগে ... % 1 টি .tt এক্সটেনশন ছাড়াই .tt ফাইলের পথ। % 2 হ'ল টেমপ্লেটে বিধানসভার নির্দেশাবলী দ্বারা উল্লিখিত যে কোনও ডিএলএলগুলির পথ ।

এরপরে, টি 4 টেমপ্লেটযুক্ত প্রকল্পের প্রকল্পের বৈশিষ্ট্যগুলিতে যান। ইভেন্টগুলি তৈরিতে যান এবং নিম্নলিখিত প্রাক-বিল্ড ইভেন্ট কমান্ড লাইন যুক্ত করুন :

$(SolutionDir)..\..\tools\RunTemplate.bat $(ProjectDir)MyTemplate $(OutDir)

মাই টেম্প্লেটটি .tt এক্সটেনশন ছাড়াই আপনার .tt ফাইলের (যেমন MyTemplate.tt) ফাইলের নাম দিয়ে প্রতিস্থাপন করা হচ্ছে । প্রকল্পটি নির্মাণের আগে MyTemplate.cs উত্পাদন করতে টেমপ্লেটটি প্রসারিত করার ফলাফল এটির রয়েছে। তারপরে আসল বিল্ডটি MyTemplate.cs সংকলন করবে


: যদিও আমি এখনও সমস্যা আছে stackoverflow.com/questions/1669893/...
JoelFan


14

সম্প্রতি এই দুর্দান্ত ভিএস প্লাগইনটি পাওয়া গেছে, চিপ্পি

এটি কোনও বিল্ডে আপনার টি 4 তৈরি করে না, তবে এটি জাভাস্ক্রিপ্ট, সিএসএস, এবং এমনকি আপনার সিএসএসের জন্য কম সিনট্যাক্স ব্যবহার করতে দেয়!


13

সম্ভবত সবচেয়ে সহজ উপায় হ'ল অটোটি 4 নামে একটি ভিজ্যুয়াল স্টুডিও এক্সটেনশন ইনস্টল করা ।

এটি স্বয়ংক্রিয়ভাবে বিল্ডে সমস্ত টি 4 টেমপ্লেট চালায়।


একমত! কনফিগারযোগ্য, এবং ভিএস 2015 এর সাথে কাজ করে It একমাত্র ক্ষতি হ'ল সমস্ত দলের সদস্যদের এক্সটেনশনটি ইনস্টল করতে হবে।
জিরোমাইট

12

প্রাক-বিল্ডটি একক লাইনে হ্রাস করা যেতে পারে:

forfiles /p "$(ProjectDir)." /m "*.tt" /s /c "cmd /c echo Transforming @path && \"%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\1.2\TextTransform.exe\" @file"

এটি .ttপ্রকল্পের সমস্ত ফাইলকে রূপান্তর করে এবং বিল্ড আউটপুটে তাদের তালিকাভুক্ত করে।

আপনি যদি বিল্ড আউটপুটটি না চান তবে আপনাকে কিছু "আকর্ষণীয় আচরণ" ঘিরে কাজ করতে হবে :

forfiles /p "$(ProjectDir)." /m "*.tt" /s /c "cmd /c @\"%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\1.2\TextTransform.exe\" @file"

অবশ্যই, আপনি এটিকে একটি ব্যাচ ফাইলে টেনে আনতে পারেন যেখানে আপনি ইচ্ছুক হলে প্রকল্পের ডিরেক্টরিটি পাস করেন।

NB পথটির জন্য কিছুটা টুইটের প্রয়োজন হতে পারে। উপরের পাথটি হল যেখানে ভিএস 2008 এটি আমার মেশিনে ইনস্টল করেছে; তবে আপনি দেখতে পাবেন যে সংস্করণ নম্বরটি এর মধ্যে TextTemplatingএবং TextTransform.exeভিন্ন।


@ প্রিন্টস্টার, আপনার যদি ভিএস 2012 থাকে তবে সম্ভবত এটি করার আরও ভাল উপায় আছে। অন্যান্য উত্তরগুলি ভিএস 2010 এর জন্য ইতিমধ্যে বিদ্যমান আরও ভাল উপায়গুলির বিষয়ে কথা বলছে।
পিটার টেলর

এটি সেরা পদ্ধতি, কারণ আমাকে কিছু ইনস্টল করতে হবে না।
রায়ান গেটস

1
দেখেছি সেখানে 1.2 নেই তবে সেখানে একটি 12.0 ছিল তাই এটি এটিকে পরিবর্তন করেও এই ত্রুটিটি পেয়েছে: System.Exception: T4MVC can only execute through the Visual Studio host
কলম্বে

1
1.2 এর পরিবর্তে 14.0 ব্যবহার করার জন্য ফোল্ডারের পাথটি আপডেট করতে হবে এবং ভাল।
পিস্তল-পিট

এটি ছিল আমার মতে সেরা সমাধান (উপরে বর্ণিত 14.0 পরিবর্তন)
নেলসন রডরিগেজ

9

সি: \ প্রোগ্রাম ফাইলগুলি (x86) \ প্রচলিত ফাইলগুলি \ মাইক্রোসফ্ট ভাগ করা \ পাঠ্য টেম্প্লেটিং সেখানে একটি কমান্ড লাইন রূপান্তর উদাহরণ রয়েছে। বিকল্পভাবে একটি কাস্টম হোস্টের সাথে একটি এমএসবিল্ড টাস্ক লিখুন এবং নিজেকে রূপান্তর করুন।


1
ওহ, যদিও আপনি "দেবেনভ / কমান্ড টেক্সট ট্রান্সফরমেশন.ট্রান্সফর্মআলটেম্পলেটস / কমান্ড ফাইল.এক্সিট মাই সলিউশন.স্লেন" এর মতো স্টাফ 2010 এ করতে পারেন এটি মাঝে মাঝে বিল্ড সার্ভারগুলিতে বিরতি দেয়। আপনার সেরা বাজিটি কাস্টম হোস্টের সাথে একটি এমএস বিল্ড টাস্ক লেখা।
MarkGr

ডেস্কটপ বিল্ডগুলির জন্য, কেবলমাত্র একটি ম্যাক্রো তৈরি করুন যা ট্রান্সফর্মআলটেমপ্ল্যাটগুলি করে এবং তারপরে একটি বিল্ড।
MarkGr

7

শেঠ রেনো এবং জোলফ্যানের উত্তরগুলি প্রসারিত করে আমি এটি নিয়ে এসেছি। এই সমাধানের সাহায্যে প্রতিবার আপনি প্রকল্পে একটি নতুন .tt ফাইল যুক্ত করার আগে প্রাক-বিল্ড ইভেন্টটি সংশোধন করার দরকার নেই।

বাস্তবায়ন পদ্ধতি

  • Transform_all.bat নামে একটি ব্যাচের ফাইল তৈরি করুন (নীচে দেখুন)
  • আপনি তৈরি transform_all.bat "$(ProjectDir)" $(ProjectExt)করতে চান এমন প্রতিটি একটি প্রকল্পের জন্য প্রাক-বিল্ড ইভেন্ট তৈরি করুন

transform_all.bat

@echo off
SETLOCAL ENABLEDELAYEDEXPANSION

:: set the correct path to the the app
if not defined ProgramFiles(x86). (
  echo 32-bit OS detected
  set ttPath=%CommonProgramFiles%\Microsoft Shared\TextTemplating\1.2\
) else (
  echo 64-bit OS detected
  set ttPath=%CommonProgramFiles(x86)%\Microsoft Shared\TextTemplating\1.2\
)

:: set the working dir (default to current dir)
if not (%1)==() pushd %~dp1

:: set the file extension (default to vb)
set ext=%2
if /i %ext:~1%==vbproj (
  set ext=vb
) else if /i %ext:~1%==csproj (
  set ext=cs
) else if /i [%ext%]==[] (
  set ext=vb
)

:: create a list of all the T4 templates in the working dir
echo Running TextTransform from %cd%
dir *.tt /b /s | findstr /vi obj > t4list.txt

:: transform all the templates
set blank=.
for /f "delims=" %%d in (t4list.txt) do (
  set file_name=%%d
  set file_name=!file_name:~0,-3!.%ext%
  echo:  \--^> !!file_name:%cd%=%blank%!
  "%ttPath%TextTransform.exe" -out "!file_name!" "%%d"
)

:: delete T4 list and return to previous directory
del t4list.txt
popd

echo T4 transformation complete


মন্তব্য

  1. পাঠ্য রূপান্তর টি 4 টেমপ্লেটের কোডটি আপনার প্রকল্পের ধরণের হিসাবে একই ভাষা হিসাবে ধরে নিয়েছে। যদি এই কেসটি আপনার ক্ষেত্রে প্রযোজ্য না হয়, তবে আপনাকে $(ProjectExt)কোডটি উত্পন্ন করতে চাইলে ফাইলগুলির সম্প্রসারণের সাথে যুক্তিটি প্রতিস্থাপন করতে হবে ।

  2. .TTফাইলগুলি অবশ্যই প্রকল্পের ডিরেক্টরিতে থাকতে হবে অন্যথায় তারা তৈরি করবে না। আপনি প্রথম আর্গুমেন্ট হিসাবে পৃথক পথ নির্দিষ্ট করে ( উদাহরণস্বরূপ) প্রকল্প ডিরেক্টরিটির বাইরে টিটি ফাইলগুলি তৈরি করতে পারেন"$(ProjectDir)" টিটি ফাইলযুক্ত পাথের সাথে প্রতিস্থাপন করুন ))

  3. transform_all.batব্যাচ ফাইলে সঠিক পথ নির্ধারণ করতেও মনে রাখবেন ।
    উদাহরণস্বরূপ, আমি এটি আমার সমাধান ডিরেক্টরিতে রেখেছি যাতে প্রাক-বিল্ড ইভেন্টটি নিম্নরূপ ছিল"$(SolutionDir)transform_all.bat" "$(ProjectDir)" $(ProjectExt)


আমি এই পদ্ধতির ব্যবহার করার চেষ্টা করছি, তবে '\ এই সময়ে প্রচলিত অপ্রত্যাশিত ছিল' দিয়ে আমি একটি ত্রুটি পেতে থাকি। আমার আউটপুট ঠিক এই লাইনে এটি ঘটে: f / del "delims =" %% d in (t4list.txt) এর জন্য ... কোনও ধারণা কি আমি অনুপস্থিত?
মাইকেল লুইস

@ মিশেললিউইস: ত্রুটির কারণ কী হতে পারে তা চিহ্নিত না করেই আমি বহুবার ব্যাচ ফাইলটি দিয়েছি। দয়া করে সেথ রেনোর প্রস্তাবিত পদ্ধতিটি একই ত্রুটি উত্পন্ন করে কিনা তা চেষ্টা করুন । মাঝামাঝি সময়ে, আপনি দয়া করে আপনার t4list.txtফাইলটি পেস্টবিনে পোস্ট করতে পারেন তাই আমি দেখার চেষ্টা করব যে সেখান থেকে আপনার ত্রুটি আসছে কিনা?
অ্যালেক্স এসিলফি

আমি একই ইস্যুতে শেঠের পদ্ধতির চেষ্টা করেছি ('\ এই সময়ে প্রচলিত অপ্রত্যাশিত ছিল')। কর্পোরেট নিষেধাজ্ঞার কারণে আমি t4list.txt ফাইলটি পোস্ট করতে পারি না তবে এটি একটি লাইন নিয়ে গঠিত এবং \ সাধারণ পথে দেখা যায় না।
মাইকেল লুইস

@ মিশেললিউইস: দুর্ভাগ্যক্রমে, যদি আপনার ত্রুটি ঘটে থাকে for /f "delims=" %%d in (t4list.txt) do (এবং কর্পোরেট নিষেধাজ্ঞাগুলি আপনাকে আপনার t4list.txtফাইল পোস্ট করা থেকে বিরত রাখে তবে আমি আশঙ্কা করি যে আপনাকে সাহায্য করার মতো খুব বেশি কিছু আমি করতে পারি না। আমি সত্যিই এটি সমাধানে সহায়তা করতে চেয়েছিলাম কিন্তু দেখে মনে হচ্ছে এটি অসম্ভব হয়ে চলেছে কারণ আমার কাছে এগিয়ে যাওয়ার কোনও ডেটা নেই। সমস্যা সমাধানের জন্য শুভকামনা এবং আপনি সফল হলে আপনার সমাধান পোস্ট করার জন্য দয়া করে মনে রাখবেন।
অ্যালেক্স এ্যাসিলফি

এটা একই কাজ যখন সম্ভব TT রয়েছে (this.Host as IServiceProvider).GetService(typeof(EnvDTE.DTE)) as EnvDTE.DTE;? দুর্ভাগ্যক্রমে, আমি নূরের রেফারেন্স ব্যতিক্রম পাই যখন আমি ভিজ্যুয়াল স্টুডিওর ভিতরে না থেকে টিটি চালাই ।
অ্যান্ড্রে কে।

6

আপনি যদি ভিজুয়াল স্টুডিও 2010 ব্যবহার করছেন তবে আপনি ভিজ্যুয়াল স্টুডিও মডেলিং এবং ভিজ্যুয়ালাইজেশন এসডিকে ব্যবহার করতে পারেন: http : //code.msdn.mic Microsoft.com/vsvmsdk

এতে বিল্ড টাইম সময়ে টি 4 টেম্পলেট কার্যকর করার জন্য মিসবিল্ড কাজ রয়েছে।

আরও ব্যাখ্যার জন্য ওলেগের ব্লগটি দেখুন: http://www.olegsych.com/2010/04/ বুঝে- t4- msbuild- integration


4

আরে, আমার স্ক্রিপ্ট আউটপুট এক্সটেনশানটিকেও পার্স করতে পারে

for /r %1 %%f in (*.tt) do (
 for /f "tokens=3,4 delims==, " %%a in (%%f) do (
  if %%~a==extension "%CommonProgramFiles%\Microsoft Shared\TextTemplating\1.2\texttransform.exe" -out %%~pnf.%%~b -P %%~pf -P "%ProgramFiles%\Reference Assemblies\Microsoft\Framework\v3.5" %%f
 )
)
echo Exit Code = %ERRORLEVEL%

কেবল transform_all.bat $(SolutionDir)প্রাক-বিল্ড ইভেন্ট তৈরি করুন এবং আপনার সমাধানের সমস্ত * .tt ফাইল স্বয়ংক্রিয়রূপে রূপান্তরিত হবে।


3

ডায়নামো.আউটোটিটি আপনার যা প্রয়োজন তা করবে। আপনি এটি একটি রেজেক্সের মাধ্যমে ফাইলগুলি দেখতে বা বিল্ডে উত্পন্ন করতে কনফিগার করতে পারেন। এটি আপনাকে কোন টি 4 টেমপ্লেটগুলি ট্রিগার করতে চায় তা নির্দিষ্ট করার অনুমতি দেয়।

আপনি এখান থেকে এটি ডাউনলোড করতে পারেন : https://github.com/MartinF/Dynamo.AutoTT

কেবল এটি তৈরি করুন, এতে dll এবং অ্যাডআইন ফাইলগুলি অনুলিপি করুন

সি: \ ব্যবহারকারীদের নথি ments ভিজ্যুয়াল স্টুডিও 2012 2012 অ্যাডিনস \

এবং দূরে আপনি যান।

আপনি যদি এটি ভিএস ২০১২ তে যেতে চান তবে আপনাকে একটি ডায়নামো.আউটটোটি.এডডিআইএন ফাইলটি সংশোধন করতে হবে এবং অ্যাডইন ফাইলের ভিতরে সংস্করণটি ১১.০ এ সেট করতে হবে;


3

GitHub.com/Mono/T4 কে ধন্যবাদ , এই মুহুর্তে আপনি .NET কোর এবং ভিজ্যুয়াল স্টুডিও উভয়ের জন্য এটি করতে পারেন এটি আপনার .csprojফাইলে যুক্ত করে:

  <ItemGroup>
    <DotNetCliToolReference Include="dotnet-t4-project-tool" Version="2.0.5" />
    <TextTemplate Include="**\*.tt" />
  </ItemGroup>

  <Target Name="TextTemplateTransform" BeforeTargets="BeforeBuild">
    <ItemGroup>
      <Compile Remove="**\*.cs" />
    </ItemGroup>
    <Exec WorkingDirectory="$(ProjectDir)" Command="dotnet t4 %(TextTemplate.Identity)" />
    <ItemGroup>
      <Compile Include="**\*.cs" />
    </ItemGroup>
  </Target>

আপনি ভালো কিছু যোগ করা উচিত আপনি বিভিন্ন প্রোগ্রামিং ভাষার আপনার টেমপ্লেট রুপান্তর যদি <Compile Remove="**\*.vb" />এবং<Compile Include="**\*.vb" /> অর্ডার এই ফাইলগুলি কম্পাইল এমনকি যদি আপনি এখনো ফাইল উত্পন্ন না পেতে হবে।

Removeএবং Includeকৌশলটি কেবল প্রথম বারের প্রজন্মের জন্য প্রয়োজন, বা আপনি এক্সএমএলকে আরও ছোট করতে পারেন:

  <ItemGroup>
    <DotNetCliToolReference Include="dotnet-t4-project-tool" Version="2.0.5" />
    <TextTemplate Include="**\*.tt" />
  </ItemGroup>

  <Target Name="TextTemplateTransform" BeforeTargets="BeforeBuild">
    <Exec WorkingDirectory="$(ProjectDir)" Command="dotnet t4 %(TextTemplate.Identity)" />
  </Target>

এবং কেবল দুবার বিল্ড চালান (প্রথমবারের জন্য)। আপনি যদি ইতিমধ্যে সংগ্রহস্থলের প্রতিশ্রুতিবদ্ধ ফাইলগুলি তৈরি করে থাকেন তবে উভয় উদাহরণ দিয়ে পুনর্নির্মাণে কোনও সমস্যা হবে না।

ভিজ্যুয়াল স্টুডিওতে আপনি এর মতো কিছু দেখতে চাইতে পারেন:

এখানে চিত্র বর্ণনা লিখুন

এর পরিবর্তে:

এখানে চিত্র বর্ণনা লিখুন

সুতরাং আপনার প্রকল্প ফাইলে এই জাতীয় কিছু যুক্ত করুন:

  <ItemGroup>
    <Compile Update="UInt16Class.cs">
      <DependentUpon>UInt16Class.tt</DependentUpon>
    </Compile>
    <Compile Update="UInt32Class.cs">
      <DependentUpon>UInt32Class.tt</DependentUpon>
    </Compile>
    <Compile Update="UInt64Class.cs">
      <DependentUpon>UInt64Class.tt</DependentUpon>
    </Compile>
    <Compile Update="UInt8Class.cs">
      <DependentUpon>UInt8Class.tt</DependentUpon>
    </Compile>
  </ItemGroup>

এখানে সম্পূর্ণ উদাহরণ: GitHub.com/Konard/T4 GenericsExample (একক টেম্পলেট থেকে একাধিক ফাইলের জেনারেশন অন্তর্ভুক্ত)।


1

এখানে আমার সমাধান - গৃহীত উত্তরের মতো। আমাদের উত্স নিয়ন্ত্রণে আমাদের একটি সমস্যা ছিল। লক্ষ্য .cs ফাইলগুলি কেবল পঠনযোগ্য এবং টি 4 ব্যর্থ হয়েছিল। এই কোডটি এখানে অস্থায়ী ফোল্ডারে টি 4 চালায়, লক্ষ্যযুক্ত ফাইলগুলির সাথে তুলনা করে এবং কেবল একই পরিবর্তনের ক্ষেত্রে এটি অনুলিপি করে। এটি কেবল পঠনযোগ্য ফাইলের সাথে সমস্যার সমাধান করে না, তবে কমপক্ষে এটি প্রায়শই ঘটে না:

Transform.bat

ECHO Transforming T4 templates
SET CurrentDirBackup=%CD%
CD %1
ECHO %1
FOR /r %%f IN (*.tt) DO call :Transform %%f
CD %CurrentDirBackup%
ECHO T4 templates transformed
goto End

:Transform
set ttFile=%1
set csFile=%1

ECHO Transforming %ttFile%:
SET csFile=%ttFile:~0,-2%cs
For %%A in ("%ttFile%") do Set tempTT=%TEMP%\%%~nxA
For %%A in ("%csFile%") do Set tempCS=%TEMP%\%%~nxA

copy "%ttFile%" "%tempTT%
"%COMMONPROGRAMFILES(x86)%\microsoft shared\TextTemplating\11.0\TextTransform.exe"  "%tempTT%"

fc %tempCS% %csFile% > nul
if errorlevel 1 (
 :: You can try to insert you check-out command here.
 "%COMMONPROGRAMFILES(x86)%\microsoft shared\TextTemplating\11.0\TextTransform.exe"  "%ttFile%"
) ELSE (
 ECHO  no change in %csFile%
)

del %tempTT%
del %tempCS%
goto :eof

:End

আপনি একটি লাইনে আপনার চেক-আউট কমান্ড যুক্ত করার চেষ্টা করতে পারেন (:: আপনি চেষ্টা করতে পারেন ....)

আপনার প্রকল্পে এটি প্রাক-বিল্ড অ্যাকশন হিসাবে সেট করুন:

Path-To-Transform.bat "$(ProjectDir)"

1

প্রকল্পের প্রাক-বিল্ড ইভেন্টে আপনাকে কেবল এই আদেশটি যুক্ত করতে হবে:

if $(ConfigurationName) == Debug $(MSBuildToolsPath)\Msbuild.exe  /p:CustomBeforeMicrosoftCSharpTargets="$(ProgramFiles)\MSBuild\Microsoft\VisualStudio\v11.0\TextTemplating\Microsoft.TextTemplating.targets"  $(ProjectPath) /t:TransformAll 

কনফিগারেশন = ডিবাগ-এ পরীক্ষা করে, আপনি টিএফএস বিল্ড সার্ভারে উদাহরণস্বরূপ বিল্ডটি সম্পাদন করার সময়, আপনি মুক্তির মোডে কোডটি পুনরায় জেনারেট করবেন না তা নিশ্চিত করে।


টি 4 এমভিসি যদি প্রকল্পে না কেবল এবং আমরা সবাই চালাতে চাই না তবে দুর্দান্ত তবে সকলের রূপান্তর করা বিপজ্জনক হতে পারে ...
ল্যান্ডিও

3
আমার কাছে v11.0 ফোল্ডারে টেক্সটেম্প্লেটিং নেই। আপনি কোথায় থেকে যে পেতে পারি?
জ্যাক

1

ভিজ্যুয়াল স্টুডিও 2013-তে, টি 4 টেমপ্লেটটি ডান ক্লিক করুন এবং বিল্ড প্রোপার্টিটির রূপান্তরটি সত্য হিসাবে সেট করুন।


1
আমি ডান ক্লিক মেনুতে এই বিকল্পটি সন্ধান করতে অক্ষম, তবে এমএসডিএন অনুসারে ভিএস 2012 এবং 2013 এ প্রকল্পের ফাইলটি সম্পাদনা করে এটি করা সম্ভব, দেখুন এমএসডিএন.মাইক্রোসফটকম /en-us/library/ee847423 দেখুন। aspx বা msdn.microsoft.com/en-us/library/vstudio/ee847423.aspx বিস্তারিত জানার জন্য
yoel halb

এটি এমন একটি বিকল্প হিসাবে প্রতীয়মান হয়েছে যা ভিজুয়াল স্টুডিওতে ডিফল্ট নয়, কেবল বাস্তব T4 সরঞ্জামের সাথে আসে।
ম্যাট ডিট্রোলিও

হ্যাঁ এটি কেবল টি 4 সরঞ্জামবক্সের প্রো সংস্করণে রয়েছে।
পোম্পায়ার

1

এটি আমি কীভাবে সামাল দিয়েছি তা এখানে। লিঙ্ক । মূলত একটি দুর্দান্ত ব্লগের শীর্ষে বিল্ডিং (ব্লগসক্লারিয়াসকনসালটিং.এন.কেজু / হাও টু ট্রান্সফর্ম-t4-templates-on-build-without-installing-a- ভিজ্যুয়াল- স্টুডিও-sdk/ আরও 2 পোস্ট করতে পারে না লিঙ্কগুলি :() আমি এই .টারাজেটগুলি নিয়ে এসেছি ভিজ্যুয়াল স্টুডিও প্রজ ফাইলগুলির সাথে ব্যবহারের জন্য ফাইলটি ।

আপনি যখন আপনার .t. এর অভ্যন্তরে অন্যান্য dll-s ব্যবহার করছেন তখন এটি কার্যকর এবং আপনি dll-s পরিবর্তিত হওয়ার সাথে সাথে ফলাফলটি পরিবর্তন করতে চান।

কিভাবে এটা কাজ করে:

  1. টিটি তৈরি করুন, সমাবেশের নাম = "$ (সলিউশনডির) পাথ \" থেকে \ অন্যান্য \ প্রকল্পের আউটপুট \ foo.dll যুক্ত করুন এবং রূপান্তরটি সেট করুন এবং প্রত্যাশার মতো ফলাফলটি তৈরি করুন
  2. .Tt থেকে সমাবেশের রেফারেন্সগুলি সরান

  3. প্রোজ ফাইলের অভ্যন্তরে বিল্ডে রূপান্তর সেট আপ করতে এই কোডটি ব্যবহার করুন:

    <PropertyGroup>
      <!-- Initial default value -->
      <_TransformExe>$(CommonProgramFiles)\Microsoft Shared\TextTemplating\10.0\TextTransform.exe</_TransformExe>
      <!-- If explicit VS version, override default -->
      <_TransformExe Condition="'$(VisualStudioVersion)' != ''">$(CommonProgramFiles)\Microsoft Shared\TextTemplating\$(VisualStudioVersion)\TextTransform.exe</_TransformExe>
      <!-- Cascading probing if file not found -->
      <_TransformExe Condition="!Exists('$(_TransformExe)')">$(CommonProgramFiles)\Microsoft Shared\TextTemplating\10.0\TextTransform.exe</_TransformExe>
      <_TransformExe Condition="!Exists('$(_TransformExe)')">$(CommonProgramFiles)\Microsoft Shared\TextTemplating\11.0\TextTransform.exe</_TransformExe>
      <_TransformExe Condition="!Exists('$(_TransformExe)')">$(CommonProgramFiles)\Microsoft Shared\TextTemplating\12.0\TextTransform.exe</_TransformExe>
      <!-- Future proof 'til VS2013+2 -->
      <_TransformExe Condition="!Exists('$(_TransformExe)')">$(CommonProgramFiles)\Microsoft Shared\TextTemplating\13.0\TextTransform.exe</_TransformExe>
      <_TransformExe Condition="!Exists('$(_TransformExe)')">$(CommonProgramFiles)\Microsoft Shared\TextTemplating\14.0\TextTransform.exe</_TransformExe>
      <_TransformExe Condition="!Exists('$(_TransformExe)')">$(CommonProgramFiles)\Microsoft Shared\TextTemplating\15.0\TextTransform.exe</_TransformExe>
    
      <IncludeForTransform>@(DllsToInclude, '&amp;quot; -r &amp;quot;')</IncludeForTransform>
    </PropertyGroup>
    • প্রথম অংশটি পাঠ্য ট্রান্সফর্ম.কেক্সের সন্ধান করে

    • $(IncludeForTransform)সমান হবে c:\path\to\dll\foo.dll' -r c:\path\to\dll\bar.dllকারণ কমান্ড লাইনে টেক্সট ট্রান্সফর্মের জন্য রেফারেন্স যুক্ত করার উপায়

       <Target Name="TransformOnBuild" BeforeTargets="BeforeBuild">
         <!--<Message Text="$(IncludeForTransform)" />-->
         <Error Text="Failed to find TextTransform.exe tool at '$(_TransformExe)." Condition="!Exists('$(_TransformExe)')" />
         <ItemGroup>
           <_TextTransform Include="$(ProjectDir)**\*.tt" />
         </ItemGroup>
         <!-- Perform task batching for each file -->
         <Exec Command="&quot;$(_TransformExe)&quot; &quot;@(_TextTransform)&quot; -r &quot;$(IncludeForTransform)&quot;" Condition="'%(Identity)' != ''" />
       </Target>
    • <_TextTransform Include="$(ProjectDir)**\*.tt" />এটি প্রজেক্টের ভিতরে সমস্ত টিটি ফাইলের একটি তালিকা এবং সাব ডিরেক্টরিগুলি তৈরি করে

    • <Exec Command="... পাওয়া প্রতিটি .tte ফাইলের জন্য একটি লাইন তৈরি করে "C:\path\to\Transform.exe" "c:\path\to\my\proj\TransformFile.tt" -r"c:\path\to\foo.dll" -r "c:\path\to\bar.dll"

  4. কেবলমাত্র কেবল কাজটিই এর ভিতরে থাকা ঘরের মধ্যে পথগুলি যুক্ত করা:

        <ItemGroup>
          <DllsToInclude Include="$(ProjectDir)path\to\foo.dll">
            <InProject>False</InProject>
          </DllsToInclude>
          <DllsToInclude Include="$(ProjectDir)path\to\bar.dll">
            <InProject>False</InProject>
          </DllsToInclude>
        </ItemGroup>

    এখানে <InProject>False</InProject>সমাধান দেখতে থেকে এই আইটেমগুলি লুকায়

সুতরাং এখন আপনার বিল্ড এবং dll-s পরিবর্তনের ক্ষেত্রে আপনার কোড তৈরি করতে সক্ষম হওয়া উচিত।

আপনি কাস্টম সরঞ্জামটি (ভিজ্যুয়াল স্টুডিওর অভ্যন্তরীণ বৈশিষ্ট্যগুলি থেকে) সরিয়ে ফেলতে পারেন যাতে ভিএস প্রতিবার রূপান্তর করতে এবং খারাপভাবে ব্যর্থ হয় না। কারণ আমরা পদক্ষেপ 2-এ সমাবেশের রেফারেন্সগুলি সরিয়েছি


আরও প্রসঙ্গ সরবরাহ করতে দয়া করে আপনার উত্তরটিতে সমাধানটি নিজেই যুক্ত করুন। লিঙ্কগুলি প্রশ্নের কোনও সমাধান নয় এবং পরে যখন অন্য ব্যবহারকারীরা এই প্রশ্নে ফিরে আসে তখন মারা যেতে পারে।
ফ্র্যাঙ্ক ভ্যান উইজক


1

আপনি কেবল নিউগেট প্যাকেজ ইনস্টল করেছেন: ক্লারিয়াস.ট্রান্সফর্মঅনবিল্ড

তারপরে, প্রতিবার আপনি পুনর্নির্মাণ প্রকল্পে (বা সমাধান) ক্লিক করুন , আপনার .tt ফাইলগুলি চলবে


1

ভিজ্যুয়াল স্টুডিও 2017 এ (সম্ভবত পরবর্তী সংস্করণগুলিও), আপনার এটি প্রাক-বিল্ড ইভেন্টে যুক্ত করা উচিত:

"$(DevEnvDir)TextTransform.exe" -out "$(ProjectDir)YourTemplate.cs" "$(ProjectDir)YourTemplate.tt"

PS আপনার টেম্পলেটটিতে পাথ পরিবর্তন করুন যদি এটি মূল প্রকল্প ডিরেক্টরিতে না থাকে।


0

কিছু লোক একটি নির্মিত নুগেট প্যাকেজ তৈরি করেছে জন্য করেছে।

পার্শ্ব নোট: আমি TextTemplate.exe এবং সেই প্যাকেজ উভয় থেকেই সংকলন ত্রুটি পেয়েছি (কারণ সেই প্যাকেজটি TextTemplate.exe কল করে) তবে ভিজ্যুয়াল স্টুডিও থেকে নয়। সুতরাং দৃশ্যত আচরণ একই নয়; মাথা আপ

সম্পাদনা: এটি আমার সমস্যা হিসাবে শেষ হয়েছে।


0

এখানে কেবলমাত্র মাইক্রোসফ্ট টুলিং এবং স্ট্যান্ডার্ড পাথ ব্যবহার করে একটি প্রাক-বিল্ড ইভেন্ট রয়েছে। এটি vs2019 / নেটকোয়ার 3.3 তে পরীক্ষা করা হয়েছে।

আপনার প্রকল্প-সম্পর্কিত ফাইল পথের সাথে "AppDbContext.tt" প্রতিস্থাপন করুন:

"$(MSBuildBinPath)\msbuild" $(SolutionPath) /t:$(ProjectName):Transform /p:TransformFile="AppDbContext.tt" /p:CustomAfterMicrosoftCommonTargets="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v$(VisualStudioVersion)\TextTemplating\Microsoft.TextTemplating.targets"

মাইক্রোসফ্টেরও আপনার প্রকল্পের ফাইলটিতে T4ParameterValues ব্যবহার করে টেমপ্লেটে " S (SolutionDirectory)" এর মতো ম্যাক্রোগুলি উপলভ্য করার জন্য একটি গাইড রয়েছে ।

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