簡答
是什麼原因導致的重編譯被觸發?
當.NET Core命令行界面(CLI)的版本和/或位(x86或x64)在構建和運行程序之間發生變化時,會發生重新編譯。
在命令行中,通過運行dotnet --version
來查找版本,並通過運行dotnet --info
來查找位數。
爲什麼這兩個項目中只有一個會觸發重新編譯?
這取決於您的具體設置。您的一個項目正在構建與運行它的版本不同的CLI版本/位數。
我可以防止這個嗎?
對於給定的項目,使用相同的CLI版本/位構建和運行。您可以使用global.json
file's sdk.version屬性或僅安裝一個版本的CLI來控制此屬性。
一些細節
您可以在本地重新創建你的錯誤,如果你安裝了.NET CLI的多個版本。例如,假設您安裝了以下兩個版本,請使用CLI版本1.0.0-preview2-003156
創建並構建一個新的dotnet核心應用程序,然後使用CLI版本1.0.0-preview2-003133
運行它。
的PowerShell:
cd C:/
New-Item -type Directory foobar
cd foobar
Add-Content -Path global.json -Value '{ "sdk" : { "version": "1.0.0-preview2-003156" }}'
dotnet new
dotnet restore
dotnet build
Clear-Content -Path global.json
Add-Content -Path global.json -Value '{ "sdk" : { "version": "1.0.0-preview2-003133" }}'
dotnet run
輸出:
項目foobar的(.NETCoreApp,版本= V1.0)將被編譯,因爲自上次構建
的CLI的版本或更改位數
當你說「在鎖定機器之前」是什麼意思? –
您使用的是什麼版本的.NET SDK? –
@ShaunLuttin謝謝你的回答,排除一些事情是有幫助的。這兩個應用程序都使用版本1.0.0-preview2-003131在docker容器中運行,並且兩個global.json文件都指定要使用的版本。我已驗證兩個容器都使用相同的版本,但其中一個日誌是以前編譯的,而另一個需要重新編譯。當它嘗試重新編譯時,它會將該機器上的CPU限制到機器無法使用的地步(道歉,「鎖定」不是一個明確的使用形容詞)。有什麼想法嗎? – user1991179