私は MSBuild が初めてで、少し試してみたいと思っていましたが、なぜこれが機能しないのかわかりません。
したがって、私のソリューションには「Model」と「BuildTasks」の 2 つのプロジェクトがあります。BuildTasks には 1 つのクラスしかありません。
using Microsoft.Build.Utilities;
namespace BuildTasks
{
public class Test : Task
{
public override bool Execute()
{
Log.LogMessage( "FASDfasdf" );
return true;
}
}
}
そして、Model.csproj にこれを追加しました。
<UsingTask TaskName="BuildTasks.Test" AssemblyFile="$(SolutionDir)src\BuildTasks\bin\BuildTasks.dll" />
<Target Name="AfterBuild">
<Test />
</Target>
「BuildTasks」が「Model」の前にビルドされるように、ビルド順序を設定しました。しかし、モデルを構築しようとすると、次のエラーが発生します。
"BuildTasks.Test" タスクをアセンブリ C:\WIP\TestSolution\src\BuildTasks\bin\BuildTasks.dll から読み込めませんでした。ファイルまたはアセンブリ 'file:///C:\WIP\TestSolution\src\BuildTasks\bin\BuildTasks.dll' またはその依存関係の 1 つを読み込めませんでした。システムは、指定されたファイルを見つけることができません。<UsingTask> 宣言が正しいこと、およびアセンブリとそのすべての依存関係が利用可能であることを確認してください。
このファイルは確かに存在するのに、なぜ MSBuild はそれを見つけられないのでしょうか?
「$(SolutionDir)」の代わりに「C:\WIP\TestSolution」をハードコーディングしようとしても、同じエラーが発生します。ただし、その .dll をデスクトップにコピーし、デスクトップへのパスをハードコーディングすると、動作しますが、理由がわかりません。
編集:パスが間違っていません。BuildTasks のデバッグ/リリース ビルドを変更して、.dll を bin フォルダーだけに出力するようにしました。これは、デバッグ/リリースに異なるパスを持たせたくないためです。