Visual Studio 2017,Service Fabric项目,Sdk目标:打包SF项目时出错

时间:2017-01-03 20:17:07

标签: azure-service-fabric

构建期间显示的错误: 错误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中更改此行会超出此错误,并且不会导致构建中的任何其他错误:   

1 个答案:

答案 0 :(得分:2)

来自:[https://social.msdn.microsoft.com/Forums/en-US/19fd8e9c-a517-4361-b50d-656d679d9c8b/visual-studio-2017-service-fabric-project-sdk-targets-error-when-packaging-sf-project?forum=AzureServiceFabric]

的马特塔尔曼

此问题应在最新版本的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中将包定义为未列出的原因)。