【问题标题】:project.assets.json not found with msbuild在 msbuild 中找不到 project.assets.json
【发布时间】:2019-03-31 11:45:46
【问题描述】:

我有一个 ASP.NET Core 应用程序,我希望使用 MSBuild 15 在 jenkins 机器上构建它。

当我尝试构建时,出现以下错误:

C:\Program Files\dotnet\sdk\2.1.502\Sdks\Microsoft.NET.Sdk\targets\Microsoft.PackageDependencyResolution.targets(198, 5): 错误 NETSDK1004: 资产文件 'C:\sync\Src\Util\myUtil\ob j\project.assets.json' 未找到。运行 NuGet 包还原以生成此文件

我知道我需要以某种方式进行 nuget 恢复,但我未能使其正常工作。

我的构建过程: 使用以下命令运行批处理文件:

call "%VS150COMNTOOLS%VsDevCmd.bat"
MSBuild DailyBuild.proj /t:DailyBuild /p:VersionNumber=%2 /l:FileLogger,Microsoft.Build.Engine;logfile=Build.log

DailyBuild.proj 文件如下所示:

<Project xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    <SourcesPath>$(MSBuildProjectDirectory)\..\..\</SourcesPath>
    <CSCleanProperties>BuildType=Clean;Configuration=Release;IsFormalBuild=true</CSCleanProperties>
    <CSBuildProperties>BuildType=ReBuild;Configuration=Release;PauseBuildOnError=false;PublishWebSites=true;VersionName=myProd-$(VersionNumber)</CSBuildProperties>
  </PropertyGroup>

  <Target Name="DailyBuildWithClean">
    <MSBuild Projects="$(MSBuildProjectDirectory)\Make.proj" Targets="Clean" Properties="$(CSCleanProperties)"/>
    <MSBuild Projects="$(MSBuildProjectDirectory)\Make.proj" Properties="$(CSCleanProperties)"/>
    <MSBuild Projects="$(MSBuildProjectDirectory)\Make.proj" Targets="FormalBuild" Properties="$(CSBuildProperties)"/>
  </Target>

  <Target Name="DailyBuild">
    <MSBuild Projects="$(MSBuildProjectDirectory)\Make.proj" Targets="SW;PreparePackFolder" Properties="$(CSBuildProperties)"/>
  </Target>

</Project>

Make.proj 是一个 proj 文件,其中包含要构建的许多应用程序的定义,其中之一是我的 ASP.NET Core 应用程序。

我该如何解决这个问题?谢谢。

解决方案编辑: 感谢 Martin Ullrich 的解决方案:

在 DailyBuild.proj 中添加了目标 Restore,还按照建议在 Make.proj 中添加了一个名为 restore 的目标 (即:

<Target Name="Restore">
  <MSBuild Projects="$(SourcesPath)\my.sln" Targets="Restore" />
</Target>

)

【问题讨论】:

  • 我见过这个,但它对我没有帮助。我尝试使用 MSBuild(特别是使用构建机器)而不是 dotnet 进行构建,因此 dotnet restore 对我没有帮助。除非你有更多的东西要补充,因为这个答案对我没有帮助
  • 如果你要使用 .net core,你必须遵守 SDK 规则。我建议您摆脱 .proj 文件和 msbuild 操作,并使用 dotnet CLI 和 Cake 作为构建工具。
  • 我找不到restore 命令。我错过了什么吗?
  • 我没有包含恢复命令,因为无论我尝试哪种方式都不起作用(msbuild -t:restore 或 msbuild /t:restore 总是导致找不到恢复目标)

标签: c# asp.net-core msbuild


【解决方案1】:

在您的 MSBuild 命令中添加 -r (-restore//Restore) 以在主构建之前触发还原。

restore 参数将构建Restore 目标,清除内部缓存,然后按照指定运行构建的其余部分。

由于您构建了自定义 MSBuild 项目,因此您需要向其添加 Restore 目标:

<Target Name="Restore">
  <MSBuild Projects="$(SourcesPath)\my.sln" Targets="Restore" />
</Target>

(或者在 make.proj 文件中添加另一个 Restore 目标并将其从那里转发到您需要恢复的解决方案或单个项目)

【讨论】:

  • 谢谢你,这就是我要找的东西
【解决方案2】:

在 MS 构建任务配置中直接使用还原 Nuget 包时要小心。 如 Azure DevOps 的 here 所述,此选项已弃用。 (但是,我不确定这是如何依赖于上下文的。)

(重要) 此选项已弃用。确保清除此复选框,改为使用NuGet Installer 构建步骤。

来源链接:MSBuild

但是,我已经使用了该步骤(在 TFS 中),所以这显然不会为我解决问题。

我尝试在源代码管理资源管理器中删除包文件夹,如 here 所述,但这也没有解决问题。

this 的启发,我升级了 TFS NuGet 安装程序构建步骤以使用 Nuget 4.0(在“高级”选项中),并且确实修复了它。 (也许与删除包文件夹相结合?)

【讨论】:

    【解决方案3】:

    只需在另一个位置(目录/文件夹)重新构建您的项目并运行您的解决方案,它就可以 100% 运行。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-12-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-07-04
      • 2016-11-10
      • 1970-01-01
      相关资源
      最近更新 更多