.csproj に存在する特定のファイルに基づいて、少しコードを生成することに興味があります。プロジェクトと共にコンパイルされる .cs ファイルを生成するために、どのような拡張方法を利用できますか?
警告: このタスクに T4 テンプレートを使用することをすぐに考えました。ただし、このソリューションはVisual Studio C# Express でサポートされている必要があります。Express バージョンは T4 テンプレートをサポートしていないと思います
.csproj に存在する特定のファイルに基づいて、少しコードを生成することに興味があります。プロジェクトと共にコンパイルされる .cs ファイルを生成するために、どのような拡張方法を利用できますか?
警告: このタスクに T4 テンプレートを使用することをすぐに考えました。ただし、このソリューションはVisual Studio C# Express でサポートされている必要があります。Express バージョンは T4 テンプレートをサポートしていないと思います
C# Express では、答えは簡単です。「なし」です。
C# Expressは拡張機能をサポートしていません。人々は以前に試してみましたが、それは醜いものになりました。弁護士、混乱、すべて。有名な例はTestDriven.NETです。
コマンド ラインでのビルドを気にしない場合は、msbuild カスタム タスク、またはビルド前/ビルド後のコマンドを使用できます。
VS2005/VS2008 (「適切な」) では、「カスタム ツール」が1つの方法です。Package
これには、 ;を書くことが含まれます。私は最近これを行いました。コードは検査のために公開されています。
T4 は、今後のもう 1 つのオプションです。私のニーズには合いませんでしたが、あなたのニーズには合うかもしれません。
ビルド イベントの簡単なチェックとして、次のビルド前およびビルド後のイベント (プロジェクト プロパティ -> ビルド イベント) を (高速プロジェクトで) 追加しました。
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
csproj ファイル (単なる msbuild スクリプト) を開いて、カスタム ターゲットを追加することもできます。
そのような目的のためにオーバーライドするための 2 つのデフォルト ターゲットが用意されています。
新しい msbuild タスクにカスタム dll を含めることもできますが、その場合、dll を msbuild の SafeImports リスト ( HKLM\Software\Microsoft\Visual Studio\9.0\MSBuild\SafeImports ) に追加しない限り、プロジェクトを開くときにセキュリティ警告が生成されます。あなたはVS2005を使用しています。