سؤال

أنا مهتم بالقيام ببعض عمليات إنشاء التعليمات البرمجية استنادًا إلى ملفات معينة موجودة في ملف .csproj.ما هي طرق التوسعة المتاحة لي حتى أتمكن من إنشاء ملف .cs الذي سيتم تجميعه مع مشروعي؟

تنبيه قضائي:فكرت على الفور في استخدام قوالب T4 لهذه المهمة.ومع ذلك، هذا الحل يجب تكون قابلة للدعم على Visual Studio C# Express.أعتقد أن الإصدار السريع لا يدعم قوالب T4

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

المحلول

في C# Express الإجابة بسيطة:لا أحد.

سي# اكسبريس لا يدعم الامتدادات.لقد حاول الناس من قبل وأصبح الأمر قبيحًا.المحامون، الفوضى، كل شيء.والمثال الشهير هو TestDriven.NET.

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

في VS2005/VS2008 ("المناسب")، تكون "الأداة المخصصة" هي ال إحدى الطرق للذهاب؛وهذا ينطوي على كتابة أ Package; لقد فعلت هذا مؤخرا, ، و الرمز مفتوح للتفتيش.

T4 هو خيار آخر للمضي قدمًا.لم يناسب احتياجاتي، لكنه قد يناسب احتياجاتك.


كتدقيق سريع لأحداث البناء، قمت بإضافة (في مشروع سريع) أحداث ما قبل البناء وما بعده (خصائص المشروع -> أحداث البناء) من:

echo $(TargetPath)

و

echo $(SolutionDir)

على التوالى؛اضغط على build، وسيكون الإخراج الآن:

------ Build started: Project: ConsoleApplication10, Configuration: Release Any CPU ------
echo D:\SomePath\ConsoleApplication10.exe
D:\SomePath\ConsoleApplication10.exe
c:\WINDOWS\Microsoft.NET\Framework\v3.5\Csc.exe /noconfig /unsafe+ /nowarn:1701,1702 /errorreport:prompt /warn:4 /define:TRACE /reference:"c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Core.dll" /reference:"c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Data.DataSetExtensions.dll" /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Data.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Design.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Drawing.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Windows.Forms.dll /reference:c:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\System.Xml.dll /reference:"c:\Program Files\Reference Assemblies\Microsoft\Framework\v3.5\System.Xml.Linq.dll" /debug:pdbonly /filealign:512 /optimize+ /out:obj\Release\ConsoleApplication10.exe /target:exe Form1.cs Form1.Designer.cs Form2.cs Form2.Designer.cs Program.cs Properties\AssemblyInfo.cs

Compile complete -- 0 errors, 0 warnings
ConsoleApplication10 -> D:\SomePath\ConsoleApplication10.exe
echo D:\SomePath
D:\SomePath
========== Build: 1 succeeded or up-to-date, 0 failed, 0 skipped ==========

لذلك يبدو أنه يعمل بشكل جيد (أي.تم تنفيذ كلا الحدثين).ليست أنيقة، ولكنها عملية.يجب أن تسمح لك وحدات الماكرو (مع بعض المكر) بالوصول إلى عناصر المشروع، على سبيل المثال $(ProjectPath)SomeFile.xml

نصائح أخرى

ويمكنك فتح ملف csproj (لمجرد برنامج نصي msbuild) وإضافة في أهداف مخصصة أيضا.

وهناك نوعان من الأهداف الافتراضي قدمت لك لتجاوز لمثل هذا الغرض، BeforeBuild وAfterBuild (قد يكون أكثر ولكن أنا متأكد من الآخرين).

ويمكنك أيضا تضمين دلس مخصصة مع المهام msbuild الجديدة، رغم أن هذا سيولد تحذير أمان عند فتح المشروع إلا إذا قمت بإضافة دلل على قائمة SafeImports msbuild في (HKLM \ برامج \ مايكروسوفت \ البصرية ستوديو \ 9.0 \ MSBuild \ SafeImports) ، 8.0 إذا كنت تستخدم VS2005.

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