使用 Visual Studio 2017 MVC ASP.NET 核心发布 "They must have the same number of items"

Publishing with Visual Studio 2017 MVC ASP.NET Core "They must have the same number of items"

我在尝试发布时收到以下消息:

Severity Code Description Project File Line Suppression State

Error "DestinationFiles" refers to 1 item(s), and "SourceFiles" refers to 2 item(s). They must have the same number of items.

我的项目在我的本地主机上运行,​​我现在想发布...但我收到上述错误。我从 VS 2015 转换了我的项目,发布工作正常。为了确保我的旧发布配置文件不是问题,我删除了我的配置文件的旧工作副本并设置了一个新的。我知道 VS 2017 几天前刚刚发布,任何帮助都会很棒。

我认为 Microsoft.NET.Publish.targets 文件中存在错误。

我如下更改了 DestinationFiles 行(第 99 行和第 127 行),现在可以使用了

<Copy SourceFiles = "@(_ResolvedFileToPublishAlways)"
      DestinationFiles="@(_ResolvedFileToPublishAlways -> '$(PublishDir)%(RelativePath)')"
      OverwriteReadOnlyFiles="$(OverwriteReadOnlyFiles)"
      Retries="$(CopyRetryCount)"
      RetryDelayMilliseconds="$(CopyRetryDelayMilliseconds)"
      UseHardlinksIfPossible="$(CreateHardLinksForPublishFilesIfPossible)"
      UseSymboliclinksIfPossible="$(CreateSymbolicLinksForPublishFilesIfPossible)">

这是一个已知错误,在 VS2017 RC 工具已知问题文档中提到:

Unable to publish

Unable to publish ASP.NET Core Web Application (.NET Framework)

  • Issue:

If you try to publish an ASP.NET Core Web Application (.NET Framework), you will run into the following error: "DestinationFiles" refers to 1 item(s), and "SourceFiles" refers to 2 item(s). They must have the same number of items

  • Workaround:

None available

https://github.com/aspnet/Tooling/blob/master/known-issues-vs2017.md

稍后回头看看是否提供了解决方法。

虽然在文件夹 "C:\Program Files\dotnet\sdk.0.0-preview4-004233\Sdks\Microsoft.NET.Sdk\build" 中编辑 "Microsoft.NET.Publish.targets" 对我不起作用。

该错误已在最新的 dotnet core sdk 中修复,在我的情况下它是最新的 1.0.0-rc4-004578。
不幸的是,在新版本中,他们决定 .csproj 文件甚至不需要其中的默认编译和资源模式,这些模式将默认包含在 msbuild 任务中。
因此,如果它们包含在您的 .csproj 文件中,您将无法使用 rc4 进行编译。

下面是为我完成工作的 steps/changes:

  • 从 [https://github.com/dotnet/cli]
  • 下载并安装 dotnet sdk rc4 或更高版本
  • 添加到你的 solution/project 文件夹 global.json 以新的 dotnet 核心为目标,在我的例子中: { "sdk": { "version": "1.0.0-rc4-004578" } }
  • 打开你的 .csproj 文件并编辑它(你现在可以直接在 VS 2017 中);将调试配置条件添加到默认模式项组

    <ItemGroup Condition=" '$(Configuration)' == 'Debug' "> <Compile Include="**\*.cs" /> <EmbeddedResource Include="**\*.resx" /> </ItemGroup>

  • 确保您使用的是正确的(新的)dotnet sdk:

    dotnet --versoin

  • 使用配置设置 Release

    发布您的项目

    dotnet publish PATH\MyPorject.csproj -c Release -o OUT_DIR

请注意,我们在 .csproj 文件中保留了具有默认编译模式的部分,但如果您想在 VS 2017 RC 中保持项目编译和 运行,则需要调试配置条件,它正在使用dotnet sdk 预览版4.
请记住您的活动配置应该调试。

您可以在 [https://github.com/dotnet/cli/issues/4759#issuecomment-274904448]

的 dotnet 团队线程下找到有关此处讨论的问题的更多详细信息