Web アプリケーション プロジェクト (複数のプロジェクトと複数の Web アプリケーションを含むソリューション内) から Web 配置パッケージをビルドする際に問題があります。
これは実際に動作します
たとえば、次のコマンドを使用すると、コマンドラインからプロジェクトをうまくビルドできます。
msbuild D:\PathTo\Solution\Project\Project.csproj
/fl /flp:logfile="D:\buildadventures\Build.log";errorsonly;verbosity=diagnostic
/p:SolutionDir="D:\PathTo\Project\\";Configuration=Release;Platform=AnyCpu
しかし、これは機能しません
しかし、同じコマンドを少し違う方法で試して、そのような展開パッケージを構築すると、次のようになります。
msbuild D:\PathTo\Solution\Project\Project.csproj
/fl /flp:logfile="D:\buildadventures\Build.log";errorsonly;verbosity=diagnostic
/T:Package
/p:SolutionDir="D:\PathTo\Solution\\";Configuration=Release;Platform=AnyCpu;
PackageLocation="D:\buildadventures\Project.zip";
AutoParameterizationWebConfigConnectionStrings=false
...それは惨めに失敗し、「型または名前空間名 '' が存在しません」のような何百ものエラーを吐き出します
そして、なぜこのように機能するのですか?
ただし、奇妙なことに、投稿した 2 番目のコマンドは、最初のコマンドがその前に実行されていれば問題なく動作します。
「通常の」ビルドを実行するときに実行されるタスクは、パッケージをビルドするときに実行されるタスクとは異なると思いますが、どのように異なるのでしょうか。
症状的に何が原因と思われるか
パッケージをビルドしたいプロジェクトのプロジェクトファイルには、最後にカスタムセクションが含まれていることに気付きました。
<PropertyGroup>
<PreBuildEvent>
cscript $(ProjectDir)SvnRevision\svnrevision.vbs $(ProjectDir) $(ProjectDir)Version.cs
nuget install "$(ProjectDir)packages.config" -o "$(SolutionDir)Packages"
</PreBuildEvent>
</PropertyGroup>
これがその違いの原因のようです。「通常の」ビルドを実行すると、その後、ソリューション フォルダーに新しい「Packages」ディレクトリが作成されたことがわかります。ただし、ご想像のとおり、パッケージ作成コマンドを実行しようとすると、そのディレクトリが見つかりません。Visual Studio にパッケージを作成させた場合も、この問題は発生しません。
パッケージの作成でもこの動作を引き継ぐには、プロジェクト ファイルまたは渡されたプロパティを変更する必要があるのでしょうか。
または、「通常の」ビルドを強制してから、それに何らかの方法でパッケージの作成を追加する方法はありますか?