【问题标题】:Using MSBUILD on a Framework461 solution that references a NetStandard20 assembly在引用 NetStandard20 程序集的 Framework461 解决方案上使用 MSBUILD
【发布时间】:2018-01-16 04:51:09
【问题描述】:

我什至不确定我正在尝试做的事情是否可能......

示例代码:here

基本上,我已经构建了一个 netstandard20 类库,根据 .NET 实现支持列表,它应该与 framework461 项目兼容(前提是您拥有 .NET Core 2.0 SDK)。

我可以毫无顾虑地构建 netstandard20 类库并取回 DLL(它包含在示例代码中)。

这是问题开始的地方,当尝试运行 msbuild .\netstandard_test.sln 来构建 framework461 项目时,我收到一大堆(我认为是误导性的)关于未引用“netstandard”的错误(确实如此)。

但是,如果我运行 dotnet build(或从 VS2017 构建),一切都会按预期工作。

我尝试导入各种版本的 NetStandard、NetStandard.Library 和 NetStandard.Library.Framework,以及引用 Microsoft.DotNet.BuildTools,但这似乎没有帮助。

有没有办法使用 msbuild 来构建它?我们有一个单一的构建和部署过程,如果可以避免,我宁愿不必更改它。谁知道还会出什么问题!

【问题讨论】:

    标签: c# .net msbuild .net-core .net-standard


    【解决方案1】:

    要使用 .NET Core 或 .NET Standard 构建,您需要使用 .NET Core SDK 中的 dotnet msbuild command 而不仅仅是普通的 msbuild

    dotnet msbuild .\netstandard_test.sln /p:Configuration=Release
    

    这也适用于 .NET Framework 4.6.1(和旧版本)。

    请注意,Microsoft 已提供 install scripts 以使在持续集成服务器上安装 .NET Core SDK 变得轻松。

    【讨论】:

    • 也许我没有正确解释自己。我可以很好地构建 netstandard20 类库并按预期生成了一个 DLL。问题是我的 framework461 项目引用说 DLL 不会使用 msbuild 构建。
    • 正确 - 这就是为什么您需要使用 dotnet msbuild 构建的原因。 msbuild 的旧版本无法识别引用的 .NET Standard 库。文档说您需要安装 .NET Core SDK 2.0 的原因是因为它是唯一可以使用的 MSBuild 版本。
    • 嗯,这很糟糕 :( 看起来我搞砸了我们的构建管道。感谢您的帮助。
    • 只要 VS 2017 安装了所有必要的工作负载,就不需要使用dotnet msbuild
    【解决方案2】:

    您需要使用最新的 15.* 版本(当前为 15.5.*)的 MSBuild,并确保在 Visual Studio 中安装了“跨平台开发”工作负载。这会添加定位 .NET Core SDK 所需的组件,其中包含 MSBuild SDK,例如 .NET Standard 和 .NET Core 项目使用的 Microsoft.NET.SdkMicrosoft.NET.Sdk.Web

    然后,您可以在开发人员命令提示符下使用msbuild 来构建这些项目。我建议添加 /restore (msbuild >= 15.5.*) 以确保对基于 sdk 的项目进行 NuGet 还原。

    由于 VS 2017 没有安装“全局”版本的 MSBuild,请务必使用安装在 VS 2017 文件夹中的 MSBuild 版本(与msbuild /versionwhere msbuild 核对)。

    dotnet msbuild 在使用包含文件引用或非字符串属性的 .resx 文件时存在限制。此外,它不支持 COM 引用或构建强命名程序集。如果您需要这些功能中的任何一个,请使用 msbuild (VS 2017) 而不是 dotnet msbuild (.NET Core CLI)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-03-15
      • 2012-09-21
      • 2017-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      相关资源
      最近更新 更多