2017-06-06 16 views
0

私のシナリオは、私は制御されたC#ファイルのセットを持っています。私はそれをダウンロードし、コマンドラインでこのコマンドを使用してソリューションファイルをビルドします。CoreCompileはスキップされます。私はそれが起こってほしい

"C:\Windows\Microsoft.NET\Framework64\v4.0.30319\MSBuild.exe" MyProj.sln /property:Platform=x64

しかし、私はこれを行うと、「すべての出力ファイルは、入力ファイルに関して最新であるため。 『CoreCompileは』スキップターゲット」CoreCompile言ってスキップされます問題は、.csファイルに多くの変更が含まれていないdllを生成することです。

.csファイルに小さな変更(例:ログを入れる)を行うと、正常に構築され、生成されたdllにすべての変更が含まれています。

しかし、32ビット版は初めてCoreCompileをスキップすることなく構築されています。 (同じコマンドですが、/property:Platform=x86で)

この動作を理解できませんでした。助けてください。ありがとう。

+0

.netフレームワーク(バージョン4. *)に含まれているmsbuildのバージョンはかなり古いことに注意してください。新しいバージョンはVSの一部であり、ビルドツールインストーラを使用しても利用可能です –

答えて

0

MSBuildはbuild incrementallyです。これは、各ターゲットの出力ファイルの間の入力ファイルの変更を検出することによって行われます。リポジトリを更新し、.csファイルへの変更が行われない場合は、CoreCompileをスキップする必要があります。最近のローズンバージョンhereの入力と出力を調べることができます。

/t:Rebuild(これは"/t:Clean;Build"と同じです)を使用してクリーンビルドを強制することができます。

また、/p:name=valueで渡されたパラメータを変更しても、ビルドには影響しません。インクリメンタルビルドロジックは、値ではなくファイルの変更に基づいています。出力ディレクトリに影響するパラメータが変更された場合、出力は失われたとみなされます。一部のコンパイル設定に影響するパラメータのみが変更された場合、インクリメンタルビルドでターゲットがトリガされる可能性があります。通常、これらの設定はプロジェクトで設定され、通常はインクリメンタルターゲットへの入力である$(MSBuildAllProjects)に変更されます。

など。インクリメンタルビルドに影響を与えない/p:Version=1.2.3または/p:VersionSuffix=beta1を設定すると、.NETコアthere was a problemにあります。

+0

Hey martin、 '/ t:Rebuild'は私の場合に動作します。しかし、32ビットビルドのCoreCompileは実行されますが、64ビットビルドは奇妙な動作の理由は何でしょうか? –

+0

答えを編集しました: 'Platform'のように見えるのは、コマンドライン経由でCoreCompileの入力を変更する必要はありません。私は、同じような問題(ビルドに影響を与えないコマンドラインパラメータ)に苦しんだ最近開発したインクリメンタルビルドの問題のGitHubの問題をリンクしました。 –

+0

Martinに感謝します。しかし、私はまだその行動を理解することができません。 '/ t:Rebuild'や'/t:Clean; Build'は2回目から動作します。最初の実行時には、「CoreCompil ...をスキップする」と表示されます。しかし、これらの2つの実行の間に変更はありませんでした。それは初めてそれ自体が起こるようにする方法はありますか?ビルドプロセスはこのコマンドを1回だけ実行するので、 –

関連する問題