きなこもち.net

.NET Framework × UiPath,Orchestrator × Azure × AWS × Angularなどの忘備録

dotnet build × Microsoft.Common.CurrentVersion.targets × MSB3030エラーが発生

Purpose

この記事は、dotent buildコマンドを実行した時にはまった件についてまとめたメモ。

References

特になし

Environment

>dotent --version
5.0.100

事象について

事象発生時の状況

この現象は、Jenkins Jobで実行するためのビルド処理を作成中に発生した。
ビルド対象のアプリは、ASP.NET coreのシンプルなWebアプリケーションで、ソリューションファイルの中に、Webアプリ本体と、クラスライブラリがそれぞれひとづつある形になっていた。
Jenkinsでビルドした際、ビルド結果はネットワークで共有している共有フォルダに出力しようとしていた。

・・・以上をまとめて、実行していたコマンドのイメージがこちら↓

//出力先パスの設定
> SET targetPath="共有フォルダのパス"

//移動・・・
> cd "Webアプリケーションのプロジェクトのパス"

//ビルド実行!
> dotnet build -o %targetPath% 

dotnet build 時に出たエラーメッセージ

上記コマンドを実行したときに発生したエラーがこちら↓

C:\Program Files\dotnet\sdk\5.0.100\Microsoft.Common.CurrentVersion.targets(4531,5): error MSB3030: ファイル "D:\test1\""" は見つからなかったためコピーできません。 [D:\test1\test1.csproj]

原因と対策・・・と再現方法

原因:targetPathという変数名

今回は、targetPathという変数名がdotnet buildコマンドの処理に悪影響を与えているということがわかった。この変数が、どのように悪影響を与えているかまでは調査ができていない。

対策:変数名をかえる

今回実施した対策は、targetPathという変数名をほかのものに変えるというもである。 しかし、今後こういうエラーに悩まない為にも、targetPathのように汎用的な名前を利用する場合は、プレフィックスmyなどをつけるように心がけようと思う。

再現方法

以下のコマンドをコマンドプロンプトから実行すると今回のエラーを再現できる。なお、Powershellではうまくエラーが出せないが、その理由はわかっていない。エラーが出したい場合は、コマンドプロンプトを利用することを推奨する。

> SET targetPath="Sample"
> dotnet new  console -n test1
> dotnet new  classlib -n test2
> dotnet add test1 reference test2
> dotent build test1 -o %targetPath%