3

.csprojに存在する特定のファイルに基づいて、少しのコード生成を行うことに興味があります。プロジェクトと一緒にコンパイルされる.csファイルを生成する拡張メソッドは何ですか?Visual Studioのコード生成、プロジェクトベースのコンテンツ

注意::すぐにタスク用にT4テンプレートを使用すると考えました。ただし、このソリューションは、Visual Studio C#Expressでサポートされる必要があります。エクスプレス版はT4テンプレートをサポートしていないと信じています。

+0

(コメントに返信しました) –

答えて

4

C#Expressでは、答えは簡単です。

C#Express は、内線番号をサポートしていません。人々は以前に試したことがあり、それは醜いです。弁護士、混乱、すべて。有名な例はTestDriven.NETです。

コマンドラインでビルドしても構わない場合は、msbuildカスタムタスク、またはビルド前/ビルド後コマンドを使用できます。

VS2005/VS2008(「適切」)では、「カスタムツール」はのいずれかの方法です。これにはPackageが含まれます。 I've done this recentlythe codeは検査のために開いています。

T4は今後のオプションです。それは私のニーズに合っていませんでしたが、あなたのことをするかもしれません。ビルドイベントの簡単なチェックとして


、私は前とビルド後のイベント(特急プロジェクトに)追加しました(プロジェクトのプロパティを - >ビルドイベント)の:

echo $(TargetPath) 

および

echo $(SolutionDir) 

;結果は次のようになります。

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

+0

C#はサポートの前/後のビルドステップをサポートしていますか? –

+0

私はちょうどチェックして、それはそうです。プロパティ - >ビルドイベント>ビルド前/ビルド後。もちろん、外部バッチ/ exe経由ですべてをやらなければならない –

+0

そのエコーのおかげでありがとう。役に立つかもしれない - 覚えていなければならない。 –

2

csprojファイル(msbuildスクリプト)を開いてカスタムターゲットを追加することができます。

このような目的のために、BeforeBuildとAfterBuildをオーバーライドするために用意されているデフォルトのターゲットは2つありますが、他のものはわかりません。あなたはMSBuildののSafeImportsリスト(HKLM \ SOFTWARE \マイクロソフト\のVisual StudioにDLLを追加しない限り、これはプロジェクトを開くセキュリティ警告を生成しますけれども

あなたはまた、新しいのMSBuildタスクでカスタムDLLを含めることができます\ 9.0 \ MSBuildの\ SafeImports )、VS2005を使用している場合は8.0です。