构建期间显示的错误: 错误MSB4102:值"" "项目"元素中的属性无效。参数"路径"不能有零长度。
复制步骤很简单: 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目标文件中,有这个声明。
<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中更改此行会超出此错误,并且不会导致构建中的任何其他错误:
答案 0 :(得分:2)
此问题应在最新版本的VS 2017 RC中修复。确保你正在运行最新版本。
但是,即使使用最新版本,在VS或某些自动逻辑下载了Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.4.0 NuGet包而不是使用该包的情况下,您可以看到此问题。在盒子里运送。 VS 2017 RC包装盒中附带的NuGet软件包版本具有此问题的修复程序。但是NuGet.org中存在的Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.4.0 NuGet包没有修复。目前有一个NuGet包(版本1.4.1)的更新,其中包含一个存在但未列出的修复程序。因此,如果您需要使用该更新的软件包,则需要对Service Fabric应用程序项目进行一些手动更改:
更新packages.config文件,使其引用Microsoft.VisualStudio.Azure.Fabric.MSBuild软件包的1.4.1版。 通过将“Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.4.0”的实例替换为“Microsoft.VisualStudio.Azure.Fabric.MSBuild.1.4.1”来更新.sfproj文件。 通常,当您更新NuGet包版本时,NuGet会自动为您更新项目文件,但由于NuGet与Service Fabric Application项目类型存在问题,这些更新不会自动发生,这就是您需要进行这些更改的原因手动(以及在NuGet.org中将包定义为未列出的原因)。