2017-03-10 63 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的版本或更改位数
相关问题