2

YUICompressor.NET ( http://yuicompressor.codeplex.com/ ) を msbuild タスクとして構成しましたが、開発マシンで期待どおりに動作しています。

コードを AppHarbor にプッシュすると、次のビルド エラーが発生します。

D:\temp\q2hapsex.50d\input\Projects\CroquetScores.Web\Build\YUICompressor.targets(21,9):
error MSB4062: The "CompressorTask" task could not be loaded from the assembly
D:\temp\q2hapsex.50d\input\Projects\CroquetScores.Web\Build\..\Bin\Yahoo.Yui.Compressor.MsBuildTask.dll.
Could not load file or assembly
'file:///D:\temp\q2hapsex.50d\input\Projects\CroquetScores.Web\Bin\Yahoo.Yui.Compressor.MsbuildTask.dll' 
or one of its dependencies. The system cannot find the file specified. 
Confirm that the <UsingTask> declaration is correct, that the assembly and all its
dependencies are available, and that the task contains a public class that implements
Microsoft.Build.Framework.ITask

http://support.appharbor.com/discussions/problems/3629-yuicompresoor-msbuild-taskで、YUICompressor.targets の using タスクを次のように変更して、アドバイスを試しました。

<UsingTask TaskName="CompressorTask" AssemblyFile="..\Bin\Yahoo.Yui.Compressor.MsBuildTask.dll" />

<UsingTask TaskName="CompressorTask" AssemblyFile="$(OutDir)Yahoo.Yui.Compressor.MsBuildTask.dll" />

次のコマンドを使用して、ローカル マシンでセットアップをテストします。

msbuild AppHarbor.sln /property:Configuration=Release /property:OutDir=D:\temp\TestingAppHarbor\

ただし、パス情報を除いて同じエラーが発生します。

D:\Code\croquetscores.com\Projects\CroquetScores.Web\Build\YUICompressor.targets(21,9): 
error MSB4062: The "CompressorTask" task could not be loaded from the assembly
D:\Code\croquetscores.com\Projects\CroquetScores.Web\Build\Yahoo.Yui.Compressor.MsBuildTask.dll. 
Could not load file or assembly
'file:///D:\Code\croquetscores.com\Projects\CroquetScores.Web\Build\Yahoo.Yui.Compressor.MsBuildTask.dll'
or one of its dependencies. The system cannot find the file specified. 
Confirm that the <UsingTask> declaration is correct, that the assembly and all its
dependencies are available, and that the task contains a public class that implements
Microsoft.Build.Framework.ITask. 

YUICompressor.targets の $(OutDir) を実際のパスに置き換えると、ソリューションはエラーなしでビルドされます。

私は何を間違っていますか?

4

1 に答える 1

1

プロパティ関数を使ったほうがいいと思います。

<PropertyGroup>
    <YuiCompressorDir>$([System.IO.Path]::GetFullPath('$(MSBuildThisFileDirectory)..\Bin'))</YuiCompressorDir>
</PropertyGroup>
<UsingTask TaskName="CompressorTask" AssemblyFile="$(YuiCompressorDir)\Yahoo.Yui.Compressor.MsBuildTask.dll" />

ASP.NET Web Stackプロジェクトの実際の を見ることができます。

于 2012-07-25T21:14:59.993 に答える