【问题标题】:Visual Studio 2017, Service Fabric project, Sdk Targets: Error when packaging SF projectVisual Studio 2017,Service Fabric 项目,SDK 目标:打包 SF 项目时出错
【发布时间】: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 中更改此行可以克服此错误,并且不会在构建中导致任何其他错误:

【问题讨论】:

    标签: azure-service-fabric


    【解决方案1】:

    发件人:Matt Thalman 在 [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 应用程序项目类型方面存在问题,这些更新不会自动发生,这就是您需要进行这些更改的原因手动(以及为什么包在 NuGet.org 中被定义为未列出)。

    【讨论】:

      猜你喜欢
      • 2019-11-06
      • 1970-01-01
      • 2018-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-11-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多