【问题标题】:Where is the difference of dotnet build on cmd vs VS2017?dotnet build on cmd vs VS2017 的区别在哪里?
【发布时间】:2018-02-18 01:50:56
【问题描述】:

背景

一个简单的 dotnet core 2.0 项目依赖于 Xamarin.Forms (2.3.4.270)。

当我在 Visual Studio 2017 (15.3) 中构建项目时,构建成功。在命令行上运行dotnet build 时失败并出现以下错误:

C:\Users\steph.nuget\packages\xamarin.forms\2.3.4.270\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.targets( 40,3): 错误 MSB4062:“Xamarin.Forms.Build.Tasks.FixedCreateCSharpManifestResourceName”任务 无法从程序集中加载 C:\Users\steph.nuget\packages\xamarin.forms\2.3.4.270\build\portable-win+net45+wp80+win81+wpa81+MonoAndroid10+Xamarin.iOS10+xamarinmac20\Xamarin.Forms.Build.Tasks.dll . 无法加载文件或程序集“Microsoft.Build.Utilities.v4.0, 版本=4.0.0.0,文化=中性,PublicKeyToken=b03f5f7f11d50a3a'。 该系统找不到指定的文件。确认 声明是正确的,即大会及其所有 依赖项可用,并且任务包含公共类 实现 Microsoft.Build.Framework.ITask。 [C:\Users\steph\Documents\Bitbucket\time-stamp-core\TimeStamp.Core.Views\TimeStamp.Core.Views.csproj]

因此,无论出于何种原因,Microsoft.Build.Utilities.v4.0 都不见了。正如您在上面的屏幕截图中看到的那样,我已经尝试添加构建实用程序,但没有成功。无论是否添加了 Build Core,我都会得到相同的结果。

.csproj文件:

<Project Sdk="Microsoft.NET.Sdk">

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Build.Utilities.Core" Version="15.3.409" />
    <PackageReference Include="Xamarin.Forms" Version="2.3.4.270" />
  </ItemGroup>

</Project>

问题

  1. dotnet build 和 Visual Studio 2017 构建此类项目的区别在哪里?我一直觉得VS2017也只是调用dotnet build
  2. 我该如何解决这个问题?

【问题讨论】:

    标签: xamarin.forms .net-core visual-studio-2017


    【解决方案1】:

    此版本的 Xamarin.Forms 表单包含无法在 .NET Core 版本的 MSBuild 上加载的构建任务,这就是您需要使用完整框架版本的 MSBuild(包含在 VS 中)的原因。

    this GitHub issue 上有一些关于这个包的讨论。

    如果包含 MSBuild 任务的包不是专门为支持 .NET Core 和 .NET Framework MSBuild 而设计的,则可能会发生这些错误。

    【讨论】:

    • 我花了一段时间才明白@MartinUllrich 所说的。最后问题出在FixedCreateCSharpManifestResourceName。这个类是Xamarin.Forms.Build.Tasks 的一部分,它扩展了一个MSBuild 类。因此,需要完整的 MSBuild,而不是轻量级的 dotnet build
    • 没错。这里需要一个为 .net core / .net 标准构建的包含 msbuild 任务子类的单独 dll。
    • 您的意思是将FixedCreateCSharpManifestResourceName 删除到引用MSBuild 的单独项目中,这样Xamarin.Forms 就不再引用MSBuild,对吗?只是想在做dotnet build 时这是否会引入一些不需要的问题。无论如何,这可能是 Xamarins GitHub 论坛中的一个问题。
    • 该任务仍应引用最近的 msbuild 版本,但它需要重新编译以获取额外的目标框架并在构建任务逻辑中进行一些连接。我相信这已经为新版本完成了..
    • 除了等待或尝试测试版之外,您无能为力。见stackoverflow.com/questions/44149941/…
    猜你喜欢
    • 2017-09-27
    • 1970-01-01
    • 2013-08-31
    • 2020-12-23
    • 2022-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多