为什么我的dotnet核心项目重新编译?
问题描述:
我有两个非常相似的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
是什么原因导致被触发重新编译?为什么这两个项目中只有一个会触发重新编译?我可以防止这一切?任何和所有的帮助将不胜感激。让我知道是否遗漏了任何重要信息。
答
简答
是什么原因导致的重编译被触发?
当.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