【发布时间】:2017-05-18 00:36:22
【问题描述】:
构建过程中显示的错误: 错误 MSB4102:元素中“项目”属性的值“”无效。参数“path”的长度不能为零。
复制步骤很简单: VS 2017 RC 2。 使用 Web API 创建面向 ASP.Net Core 的新 Service Fabric 应用程序。 然后尝试打包服务结构项目。
我怀疑 Microsoft.VisualStudio.Azure.Fabric.ApplicationProject.targets 中存在一个错误,它是 VS 2017 的一部分。 位于此目录中的那个:C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\Microsoft\VisualStudio\v15.0\Service Fabric Tools
在sdk targets文件中,有这样的语句。
<PropertyGroup Condition="'$(LanguageTargets)' == ''">
<LanguageTargets Condition="'$(MSBuildProjectExtension)' == '.csproj'">$(MSBuildToolsPath)\Microsoft.CSharp.targets</LanguageTargets>
<LanguageTargets Condition="'$(MSBuildProjectExtension)' == '.vbproj'">$(MSBuildToolsPath)\Microsoft.VisualBasic.targets</LanguageTargets>
</PropertyGroup>
<!-- TODO: Generate error if LanguageTargets property isn't set here. This would happen, for example if an .fsproj referenced the .NET Sdk
but not the FSharp one. See https://github.com/dotnet/sdk/issues/448 -->
<Import Project="$(LanguageTargets)"/>
如果你不习惯的话,有点难以破译。但。从本质上讲,如果它是 .csproj 加载 CSharp 目标,如果它是 .vbproj 加载 VB 目标,如果两者都不执行任何操作。 然后下一行尝试导入指定的目标。
对于 Service Fabric 项目,即 .sfproj,这意味着 LanguageTargets 留空,我们会收到本文顶部显示的错误。我认为 SF 目标文件应该在到达这一行之前设置 LanguageTargets。
我怀疑这个 sdk.targets 文件是一些默认模板,尚未更新以处理 VS 2017 服务结构项目。
可能的答案,但我不喜欢编辑 VS 安装的 Sdk.targets 文件的想法。在 Sdk.targets 中更改此行可以克服此错误,并且不会在构建中导致任何其他错误:
【问题讨论】: