كيف أوقف T4 من التنفيذ في كل مرة أقوم فيها بالتبديل إلى علامة تبويب أخرى؟

StackOverflow https://stackoverflow.com/questions/4034886

سؤال

عندما أقوم بتحرير T4 ، يتم تنفيذ البرنامج النصي في كل مرة أقوم فيها بالتبديل إلى ملف آخر. لا بأس في البرامج النصية السريعة البسيطة ، لكن بعض البرامج النصية تستغرق وقتًا طويلاً لتنفيذها. هل هناك طريقة لتعطيل هذا السلوك؟ أريد تشغيل البرنامج النصي فقط عند حفظ ملف T4 أو اختيار "تشغيل أداة مخصصة" يدويًا من القائمة.

هل كانت مفيدة؟

المحلول

يرتبط T4 بآلية الأدوات المخصصة (ivssinglefilegenerator) في أنظمة مشروع C#/VB ، والتي تمنحها تشغيل قائمة الأدوات المخصصة ، وأيضًا تشغيل سلوك تبديل TAB - كل ذلك بالنسبة لسعر تنفيذ واجهة بسيطة.

لسوء الحظ ، هذا يعني أن T4 ليس لديه أيضًا سيطرة على هذه السلوكيات ، والتي هي المعيار للأدوات المخصصة.

قد يكون البديل هو استخدام دعم T4 MSBuild في VS النمذجة والتصور SDK للقيام T4 في وقت البناء ثم تعطيل الأداة المخصصة. سأستفسر مع زميلي الذي قام ببناء دعم MSBuild إذا كان يستخدم الأداة المخصصة لتحديد مجموعة القوالب أو لا تنشر إلى الخيط.

نصائح أخرى

كان لي نفس القضية بالضبط. تابعت الخطوات في هذه المقالة http://msdn.microsoft.com/en-us/library/ee789839.aspx حول تقسيم القوالب إلى مشروع آخر ومشاركة ملفات الإخراج.

تفاصيل كيفية إيقاف تشغيل TextTemplatingFileGenerator الأداة المرفقة بالقالب بالنقر بزر الماوس الأيمن على القالب وتطهير CustomTool منشأه. هذا يوقف رمز توليد القالب عند حفظه ... لكنه لا يزال يعمل عند تبديل علامات التبويب!

أعتقد أن الطريقة الوحيدة للحصول على هذا هو نقل جميع رمز القالب الخاص بك إلى ملف جديد مع لاحقة مختلفة (مثل ttinclude أو T4 أو شيء ما) ثم قم بتضمين هذا الملف في ملف قالب T4 الفعلي باستخدام التوجيه. وبهذه الطريقة لن تحتاج أبدًا إلى فتح هذا الملف لتحرير القالب حتى لا يتم تشغيله عن طريق الصدفة.

لذلك في ملف واحد يسمى mytemplate.tt:

<#@ template language="VB" debug="false" hostspecific="true"#>
<#@ include file="Include\MyTemplateCodeBehind.t4" #>
<#@ output extension=".vb"#>
<# ' Nothing to see here! #>

بينما في الملف الآخر يسمى myTemplateCodeBehind.t4:

<#@ template language="VB" debug="false" hostspecific="true"#>
<#
   For Each something In somecollection
#>
   <#= something.PrintMyCode() #>
<#
   Next

#>

ما أفعله (ربما طريقة سيئة) هو الكتابة في بداية ملف TT خط استثناء مثل:

<# throw new Exception(); #>

لأنني أرمي استثناء توقف العملية ، وعندما أنهي كل العمل ، لا بد لي من إزالة هذا الخط. قون

جرب مباشرة بعد توجيهات التجميع ، أضف عودة إلى طريقة الخروج

<#@ template language="C#" debug="false" hostspecific="true"#>
<#@ include file="EF6.Utility.CS.ttinclude"#><#@ 
 output extension="Repository.cs"#><#
return string.Empty;     //<-- add this line!!! 

...

يتم تنفيذ قوالب T4 عند حفظ الملف. إذا كان لديك VS Setup to Save Auto عندما تقوم بعيدًا عن الملف الذي يمكن أن يفسر السلوك. راجع تكوين VS الخاص بك لتحديد ما إذا كان VS يحفظ الملف عند علامة التبويب بعيدًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top