【问题标题】:.NetCore runtime identifier parameters ignored, MSBuild, Team City.NetCore 运行时标识符参数被忽略,MSBuild,Team City
【发布时间】:2020-01-30 15:43:28
【问题描述】:

我在尝试通过 Team City 构建和发布 MSBuild 时遇到了问题。收到的错误信息如下:

C:\Program Files\dotnet\sdk\2.2.402\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(208, 5): error NETSDK1047: Assets file 'F:\TeamCity\buildAgent\work\9f1e0cb4e5e5076f\myproject\obj\project.assets.json' doesn't have a target for '.NETCoreApp,Version=v2.2/win-x64'. Ensure that restore has run and that you have included 'netcoreapp2.2' in the TargetFrameworks for your project. You may also need to include 'win-x64' in your project's RuntimeIdentifiers.

我原以为将以下参数传递给 MSBuild 应该可以解决问题。

/p:TargetFramework=netcoreapp2.2 /p:Runtimeidentifier=win-x64

然而事实并非如此。

我可以在 Visual Studio 中构建/发布项目,但不能通过 Team City 构建代理。

为了让构建代理构建/发布,我必须在项目 .csproj 文件中声明运行时标识符:

<PropertyGroup>
    <TargetFramework>netcoreapp2.2</TargetFramework>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>
</PropertyGroup>

在我看来,Team City 忽略了 MSBuild 参数、我的参数不正确,或者 Visual Studio 正在执行我不知道的附加步骤,以在发布时声明运行时标识符(通过 WebDeploy)。

我显然已经解决了我遇到的问题,但这似乎不是“正确”的做法。我错过了什么?

谢谢,

【问题讨论】:

    标签: visual-studio asp.net-core msbuild teamcity


    【解决方案1】:

    我显然已经解决了我遇到的问题,但这似乎没有 成为“正确”的做法。我错过了什么?

    您可以从this blog 获得一些帮助,project.assets.json 列出了项目的所有依赖项。

    当你在 VS 中创建一个新的.net core 项目时,它会为你创建这个文件。用记事本打开会发现默认没有指定runtime:

    当您尝试使用 /p:Runtimeidentifier=win-x64 通过 msbuild 命令行构建它时,msbuild 无法识别该运行时,因为它未在 projects.assets.json 文件中定义。

    解决此问题的一种简单方法是在使用Runtimeidentifier=xxx 指定命令时添加-restore 开关。

    所以实际上你需要将以下参数传递给msbuild,无需手动编辑xx.csproj文件:

    /p:TargetFramework=xxx /p:Runtimeidentifier=xxx /restore
    

    Msbuild 将在运行build 目标之前执行restore 目标,restore 目标将为win-64 重新生成一个新的projects.assets.json 文件,请参阅:

    解决方案

    所以正确的方法是在你的构建命令中添加一个restore 开关,那么无论你要定位哪个Runtimeidentifier,构建都会成功。避免手动编辑项目文件中的Runtimeidentifier

    至于为什么它在VS中起作用:当我们使用发布功能时,VS会自动为我们做恢复工作(右键单击项目=>发布)。我们可以很容易地在路径ProjectFolder\obj\publish\win-x64 中找到一个针对win-64 的projects.assets.json,因此当您从VS 发布时它会成功。嗯,这就是IDE的魅力吧?

    【讨论】:

      【解决方案2】:

      您使用哪个构建步骤(构建运行程序)来构建项目?您之前是否有NuGet Installer 步骤,以恢复项目依赖项所需的所有内容?如果您使用MSBuildVisual Studio runner,则需要添加它(据我所知,.NET CLI 和“dotnet build”命令将默认恢复,您不需要额外的步骤)。

      【讨论】:

        猜你喜欢
        • 2012-12-24
        • 1970-01-01
        • 1970-01-01
        • 2018-01-08
        • 2012-04-09
        • 2011-05-05
        • 1970-01-01
        • 2011-06-25
        • 2011-09-26
        相关资源
        最近更新 更多