msbuild中找不到project.assets.json

时间:2019-03-31 11:45:46

标签: c# asp.net-core msbuild

我有一个ASP.NET Core应用程序,希望在带有MSBuild 15的詹金斯机器上构建。

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

  

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>

3 个答案:

答案 0 :(得分:3)

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

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

自建立自定义MSBuild项目以来,您需要向其添加Restore目标:

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

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

答案 1 :(得分:0)

请小心在MS构建任务配置中直接使用Restore Nuget软件包。 不推荐使用此选项,如Azure DevOps的here所述。 (但是,我不确定上下文的依赖性如何。)

  

(重要)。不建议使用此选项。确保清除此复选框,而使用NuGet Installer构建步骤。

     

源链接:MSBuild

但是,我已经使用了该步骤(在TFS中),因此这显然无法为我解决。

我曾尝试按照here的说明在Source Control Explorer中删除程序包文件夹,但这也没有解决。

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

答案 2 :(得分:0)

只需在另一个位置(目录/文件夹)中重建项目,然后运行您的解决方案即可100%工作。