奇怪的构建错误 .Net Core 项目
Posted
技术标签:
【中文标题】奇怪的构建错误 .Net Core 项目【英文标题】:Strange Build Error .Net Core Project 【发布时间】:2017-07-07 15:54:28 【问题描述】:在我的机器上安装的是:
Visual Studio Pro 2015 Visual Studio 2015 更新 3 .NET Core 1.0.1 工具预览版 2注意:构建错误在 Windows 10 机器和 Windows 7 机器上发生,但构建在另一台 Windows 7 机器上运行。
所以我从另一个开发人员那里 git 克隆了一个 .Net Core 项目,当我尝试在 Visual Studio 2015 中构建时,我收到了错误
“系统找不到Microsoft.DotNet.Common.Targets第262行指定的文件”
转到 C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets 第 262 行中的第 262 行我看到了
<Dnx
RuntimeExe="$(SDKToolingExe)"
Condition="'$(_DesignTimeHostBuild)' != 'true'"
ProjectFolder="$(MSBuildProjectDirectory)"
Arguments="$(_BuildArguments)"
/>
如果从项目构建的 Microsoft.DotNet.Common.Targets 中删除此部分。
我知道 dnx 是旧的 .Net Core 工具,我的猜测是 project.json 中的类库是旧 dnx 工具的遗留物,而我安装的新 1.0.1 Preview 2 .Net Core 工具是将遗留的 project.json 条目推迟到 Microsoft.DotNet.Common.Targets 中的旧 dnx 工具条目,但由于我没有安装 dnx 工具,因此构建失败,当然,这只是一个猜测。
我已经在网上广泛搜索过这个问题,我 found an article 声明在 project.json 中将 "type": "platform"
用于 Microsoft.NETCore.App
依赖项,但我没有使用该依赖项,我尝试将 "type": "platform"
添加到我的 @987654327 @ 依赖,但这没有帮助,这是我的 project.json:
"version": "1.0.1-*",
"dependencies":
"Microsoft.AspNetCore.Mvc.Abstractions": "1.1.0",
"Microsoft.AspNetCore.Mvc.Core": "1.1.0",
"NETStandard.Library": "1.6.1",
"TSO.ProductItemList.Model": "1.0.2"
,
"frameworks":
"netstandard1.6":
"imports": "dnxcore50"
,
"scripts":
"postcompile":
[
"dotnet pack --no-build --configuration %compile:Configuration%",
"\"C:\\Program Files (x86)\\NuGet\\nuget\" push \"%project:Directory%\\bin\\%compile:Configuration%\\%project:Name%.%project:Version%.nupkg\" -s http://foo/NugetServer/ -apikey testkey"
]
这是构建输出:
1>------ Build started: Project: TSO.ProductItemList.Model, Configuration: Debug Any CPU ------
1> C:\Program Files\dotnet\dotnet.exe build "C:\projects\tsl\ProductItemList\src\TSO.ProductItemList.Model" --configuration Debug --no-dependencies
1> Project TSO.ProductItemList.Model (.NETStandard,Version=v1.6) will be compiled because project is not safe for incremental compilation. Use --build-profile flag for more information.
1> Compiling TSO.ProductItemList.Model for .NETStandard,Version=v1.6
1> Producing nuget package "TSO.ProductItemList.Model.1.0.2" for TSO.ProductItemList.Model
1> TSO.ProductItemList.Model -> C:\projects\tsl\ProductItemList\src\TSO.ProductItemList.Model\bin\Debug\TSO.ProductItemList.Model.1.0.2.nupkg
1> Producing nuget package "TSO.ProductItemList.Model.1.0.2.symbols" for TSO.ProductItemList.Model
1> TSO.ProductItemList.Model -> C:\projects\tsl\ProductItemList\src\TSO.ProductItemList.Model\bin\Debug\TSO.ProductItemList.Model.1.0.2.symbols.nupkg
1>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets(262,5): error : The system cannot find the file specified
2>------ Build started: Project: TSO.ProductItemList.Client, Configuration: Debug Any CPU ------
2> C:\Program Files\dotnet\dotnet.exe build "C:\projects\tsl\ProductItemList\src\TSO.ProductItemList.Client" --configuration Debug --no-dependencies
2> Project TSO.ProductItemList.Client (.NETStandard,Version=v1.6) will be compiled because project is not safe for incremental compilation. Use --build-profile flag for more information.
2> Compiling TSO.ProductItemList.Client for .NETStandard,Version=v1.6
2> Producing nuget package "TSO.ProductItemList.Client.1.0.1" for TSO.ProductItemList.Client
2> TSO.ProductItemList.Client -> C:\projects\tsl\ProductItemList\src\TSO.ProductItemList.Client\bin\Debug\TSO.ProductItemList.Client.1.0.1.nupkg
2> Producing nuget package "TSO.ProductItemList.Client.1.0.1.symbols" for TSO.ProductItemList.Client
2> TSO.ProductItemList.Client -> C:\projects\tsl\ProductItemList\src\TSO.ProductItemList.Client\bin\Debug\TSO.ProductItemList.Client.1.0.1.symbols.nupkg
2>C:\Program Files (x86)\MSBuild\Microsoft\VisualStudio\v14.0\DotNet\Microsoft.DotNet.Common.Targets(262,5): error : The system cannot find the file specified
========== Build: 0 succeeded, 2 failed, 0 up-to-date, 0 skipped ==========
【问题讨论】:
试试 VS 2017。 Microsoft 不再积极维护旧工具。 @LexLi VS 2015 被认为是旧工具?为什么微软的 .NET Core 安装说明的第一步是:“下载 Visual Studio 2015”? microsoft.com/net/core#windowsvs2015 只是因为现在还不是 3 月 7 日。他们可能不想在这么短的时间内两次更新页面。 @LexLi 我怀疑 VS 2015 是个问题,VS 2015 应该只是使用已安装的 .NET Core 工具,在我的情况下:.NET Core 1.0.1 工具预览 2 那么显然是预览版2的问题。随着整个工具链正在向VS2017移动,您很快就会每天都需要它。 【参考方案1】:错误消息完全具有误导性,我的postcompile
cmd 将库作为 nuget 包发布到我自己的 nuget 服务器失败了:
"scripts":
"postcompile":
[
"dotnet pack --no-build --configuration %compile:Configuration%",
"\"C:\\Program Files (x86)\\NuGet\\nuget\" push \"%project:Directory%\\bin\\%compile:Configuration%\\%project:Name%.%project:Version%.nupkg\" -s http://foo/NugetServer/ -apikey testkey"
]
该 cmd 正在尝试调用 C:\Program Files (x86)\NuGet\nuget.exe
正如我所说,我克隆了这个项目并没有创建它,创建该项目的开发人员安装了C:\Program Files (x86)\NuGet\nuget.exe
。
我只有 C:\Program Files (x86)\NuGet
,没有 nuget.exe,该文件夹存在是因为我安装了 Visual Studio 2015 nuget 扩展,.vsix
文件在那里但没有 nuget.exe。
我只是下载了 nuget.exe here,latest (v3.5.0) 并放置在我的编译后 cmd 预期的位置:C:\Program Files (x86)\NuGet
【讨论】:
很高兴看到您找到了原因,但由于预览版即将到期,建议您迁移到最新的 SDK。 很好的提示,这也是我的原因。 VS2017回归csproj,期待更好的SDK【参考方案2】:试试这个...
-
关闭 Visual Studio
下载1.1 SDK,https://www.microsoft.com/net/core#windowscmd
在 Visual Studio 中重新打开项目
删除project.lock.json(等待恢复)
重建
【讨论】:
我已经安装了.net core 1.1,我已经删除了.json.lock 等待恢复,后续构建仍然失败 尝试添加运行时部分(在框架部分下方): "runtimes" : "win10-x64": , 也出现在 Windows 7 上 尝试添加运行时条目,没有运气,我已将构建输出添加到我的问题中【参考方案3】:我已经制作了场景。 您可以完全恢复软件包。 按照步骤: 右键单击项目->单击Resotre Packages 并检查你的输出。
希望这能解决您的问题。
【讨论】:
另外,我建议您使用 Visual Studio 2017 社区或专业的高版本 .Net Core 2x 。以上是关于奇怪的构建错误 .Net Core 项目的主要内容,如果未能解决你的问题,请参考以下文章
构建 Asp.Net Core 项目时出现 System.IO.PathTooLongException
构建时的ASP.NET Core错误 - 缺少一个或多个编译引用