プロジェクトに「manifest.json」ファイルが必要です。このファイルには、プロジェクトが依存しているがプロジェクトの一部ではない.csファイルと.dllファイルのリストが含まれています。ビルド時にもこれらのファイルをコンパイルするには、何らかの方法でVisualStudioにこれらのソースファイルとアセンブリをビルドプロセスに含めるように指示する必要があります。
ビルド前のイベントでこれを行う方法はありますか?
プロジェクトに「manifest.json」ファイルが必要です。このファイルには、プロジェクトが依存しているがプロジェクトの一部ではない.csファイルと.dllファイルのリストが含まれています。ビルド時にもこれらのファイルをコンパイルするには、何らかの方法でVisualStudioにこれらのソースファイルとアセンブリをビルドプロセスに含めるように指示する必要があります。
ビルド前のイベントでこれを行う方法はありますか?
ビルド プロセスの前にファイルを追加するカスタム ITaskItem を作成しました。
これが私がやった方法です:
1) カスタム ITaskItem を作成する
public class AddSourceFiles : Task
{
private ITaskItem[] output = null;
[Output]
public ITaskItem[] Output
{
get
{
return output;
}
}
public override bool Execute()
{
//gather a list of files to add:
List<string> filepaths = new List<string>() { "a.cs", "b.cs", "d.cs" };
//convert the list to a itaskitem array and set it as output
output = new ITaskItem[filepaths.Count];
int pos = 0;
foreach (string filepath in filepaths)
{
output[pos++] = new TaskItem(filepath);
}
}
}
2) 「AddSourceFiles.targets」などの *.targets ファイルを作成します。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
<UsingTask AssemblyFile="AddSourceFiles.dll" TaskName="AddSourceFiles" />
<PropertyGroup>
<BuildDependsOn>
AddSourceFiles;
$(BuildDependsOn);
</BuildDependsOn>
</PropertyGroup>
<Target Name="AddSourceFiles">
<AddSourceFiles>
<Output TaskParameter="Output" ItemName="Compile" />
</AddSourceFiles>
</Target>
</Project>
ご覧のとおり、クラス "AddSourceFiles" の結果の DLL がタスク ファイルで参照されます。
3) 最後のステップは、AddSourceFiles クラスを使用して、ファイルを含めるすべての .csproj ファイルにこの .targets ファイルをインポートすることです。
<?xml version="1.0" encoding="utf-8"?>
<Project ToolsVersion="4.0" DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
.
.
<Import Project="c:\path\to\AddSourceFiles.targets" />
.
.
</Project>
私もこれに非常に慣れていないので、これを改善してください;)
VisualStudio マクロを使用する必要があります。
http://msdn.microsoft.com/en-us/library/b4c73967(v=vs.100).aspx
http://msdn.microsoft.com/en-us/library/8h31zbch.aspx
Macros IDE には、達成しようとしているものに似た例が含まれています。
AddDirAsSlnFolder — ディスク上のフォルダーをソリューション フォルダー構造にインポートします。
- - - アップデート - - -
Vs2012 にはマクロ機能が削除されていることがわかりました....