ビルドプロセスのカスタマイズに取り組んでいますが、興味深い動作が1つあります。文字列プロパティ関数を使用して一部の文字列を変更すると、ビルドが壊れ始めます。
たとえば、私はこのことをしようとしています:
<PropertyGroup>
<BuildDependsOn>$(BuildDependsOn.Replace(";MyTarget", ""))</BuildDependsOn>
</PropertyGroup>
MyTargetは、BuildDependsOnプロパティから削除したいカスタムターゲットです。これを実行しようとすると、文字列が正しく削除されたように見えますが、ターゲットが存在しないというエラーが発生します(これは、Visual Studio 2010とコマンドラインMSBuildの両方で発生します)。
エラーは次のとおりです。
The target "EntityDeploy;
BeforeBuild;
CoreBuild;
AfterBuild" does not exist in the project.
このプロパティを変更すると、MSBuildはその値の解析を停止し、次の1つのターゲット(空白、改行、改行を含む)を検索しようとしていると思います。
"EntityDeploy;
BeforeBuild;
CoreBuild;
AfterBuild"
そして、そのようなターゲットが存在しないというエラーをスローします。
私はまた、この問題についてもっと知るためにもっと些細なことを実行しようとしました、そして私はこれを実行しようとしました:
<PropertyGroup>
<BuildDependsOn>$(BuildDependsOn.Trim())</BuildDependsOn>
</PropertyGroup>
関数でもエラーが再発しましたTrim()
。何か案が?
編集:私はデバッグして問題を見つけようとしました、そして私はこれに遭遇しました:メソッドBuildDependsOn
の実行の前にプロパティをチェックするときTrim()
、その値は次のようになります:
Value "BuildDependsOn"="\r\n EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild\r\n \r\n "
EvaluatedValue "\r\n EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild\r\n \r\n " string
escapedValue "\r\n EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild\r\n \r\n " string
メソッドの後Trim()
、プロパティ値は次のようになります。
Value "BuildDependsOn"="EntityDeploy%3b\r\n \r\n BeforeBuild%3b\r\n CoreBuild%3b\r\n AfterBuild"
EvaluatedValue "EntityDeploy;\r\n \r\n BeforeBuild;\r\n CoreBuild;\r\n AfterBuild" string
escapedValue "EntityDeploy%3b\r\n \r\n BeforeBuild%3b\r\n CoreBuild%3b\r\n AfterBuild" string
セミコロン(; <=>%3b)がビルドを壊している可能性がありますか?どうすればこれを修正できますか?