2017-03-10 61 views
1

我有兩個非常相似的dotnet核心REST API的。當我去部署它們時,一個運行沒有問題。然而,另一種打印以下消息日誌鎖定機器前:爲什麼我的dotnet核心項目重新編譯?

Project app (.NETCoreApp,Version=v1.0) will be compiled because 
the version or bitness of the CLI changed since the last build 

是什麼原因導致被觸發重新編譯?爲什麼這兩個項目中只有一個會觸發重新編譯?我可以防止這一切?任何和所有的幫助將不勝感激。讓我知道是否遺漏了任何重要信息。

+0

當你說「在鎖定機器之前」是什麼意思? –

+0

您使用的是什麼版本的.NET SDK? –

+1

@ShaunLuttin謝謝你的回答,排除一些事情是有幫助的。這兩個應用程序都使用版本1.0.0-preview2-003131在docker容器中運行,並且兩個global.json文件都指定要使用的版本。我已驗證兩個容器都使用相同的版本,但其中一個日誌是以前編譯的,而另一個需要重新編譯。當它嘗試重新編譯時,它會將該機器上的CPU限制到機器無法使用的地步(道歉,「鎖定」不是一個明確的使用形容詞)。有什麼想法嗎? – user1991179

回答

2

簡答

是什麼原因導致的重編譯被觸發?

當.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的版本或更改位數
相關問題