ChatGPT解决这个技术问题 Extra ChatGPT

Assets file obj\project.assets.json doesn't have a target - VS2017

Using Visual Studio 2017, AspNetCore 1.1.2

All of a sudden I am getting following error when I am trying to publish (Release build) any project in the solution:

Assets file 'C:\example\obj\project.assets.json' doesn't have a target for '.NETFramework,Version=v4.5.2/win7-x86'. Ensure that restore has run and that you have included 'net452' in the TargetFrameworks for your project. You may also need to include 'win7-x86' in your project's RuntimeIdentifiers.

Have checked in the project.assets.json files, I have:

"targets": {
  ".NETFramework,Version=v4.5.2": {

and

"runtimes": {
  "win7-x86": {
    "#import": []
  }

In the *.csproj files I have:

  <PropertyGroup>
      <TargetFramework>net452</TargetFramework>
  </PropertyGroup>

  <PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
      <PlatformTarget>x86</PlatformTarget>
  </PropertyGroup> 

Have made no changes to config in the projects. Only thing is that I have updated VS2017 to latest version today, 15.6.3. Could this cause issue?

Does deletion of "C:\example\ob" folder and rebuild help?
No sorry same issue.
Please clarify: .NET Framework and .NET Core are two different things. It doesn't appear that you're using .NET Core at all here.
Just in case someone finds this after running into the same problem as me: one of the issues you can run into is a mismatch between .NET Standard and .NET Core when you're doing multi-targeting. You can't have a library target .NET Standard and then use dotnet build -f netcoreapp2.1 despite the code being technically compatible. You either need to use -f netstandard2.0 and add that to your assets file as a target, or switch to targeting .NET Core 2.1.

D
Dale K

According to the Microsoft blog (which, bizarrely, my account doesn't have permissions to post in), this isn't a bug, and is entirely caused by ReSharper. If you disable this, the problem goes away.

Errr, one problem: I'm getting this error, and I don't have ReSharper.

After a lot of hunting around, I found the reason I was getting the error on my .NET Core project which had been upgraded from 1.0 to 2.1.

When running my project in Debug or Release mode, everything worked fine, but when I tried to publish to Azure, I got that error:

Assets file '(mikesproject)\obj\project.assets.json' doesn't have a target for '.NETCoreApp,Version=v2.0'. Ensure that restore has run and that you have included 'netcoreapp2.0' in the TargetFrameworks for your project.

Although I had updated the version of .NET Core to 2.1 in Project\Properties and upgraded the various nuget packages, there was one place which hadn't picked up this change... the Publish Profile file.

I needed to go into the Properties\PublishProfiles folder in my solution, open up the .pubxml file relating to the way I was publishing to Azure, and change this setting from netcoreapp2.0 to netcoreapp2.1:

<Project ToolsVersion="4.0" xmlns="http://schemas.microsoft.com/developer/msbuild/2003">
  <PropertyGroup>
    . . . 
    <TargetFramework>netcoreapp2.0</TargetFramework>
    . . . 
  </PropertyGroup>
</Project>

Ridiculous, hey?

I do wish Microsoft error messages gave some clue as to the source of problems like this.


Removed and created a new Publish Profile and then it worked!
I run into the same issue just a view versions later. Removing the TargetFramework element seems to work as well. Hope I will not run into that issue again ...
This fixed the problem for me after upgrading from from 3.0 to 3.1. I had to manually change TargetFramework from netcoreapp3.0 to netcoreapp3.1
You don't even have to manually edit it. You can just click on "Edit" from the "Publish" screen itself and make sure the target is correct. (Mine auto-updated the target framework at that point.) And then click save which will update the .pubxml. Odd that this doesn't happen automatically when .NET versions are upgraded.
Had the issue when upgrading een old project from .NET 4.6.1 to .NET 4.8, and this solved it :)
F
Ferro

Restarting Visual Studio solved the error for me.


Updated an open solution from github which included new framework targets, this answer fixed the problem when nothing else did.
This solved my issue in VS 16.8.2 with netcoreapp3.1;netstandard2.0
yep. should have tried turning it off and on again
Closing VS2022 and reopening the solution worked as well.
It's hilarious that this actually works.
P
Paul

Right click on the project file, and click unload. Then right click on the project and reload.


This worked for me after I also "Rebuilt" the offending project
Had this problem using dotnet publish and AWS tools - this worked for me
C
CodingYourLife

Had this error in similar situation. This has helped me: Link

This is my property group in *.csproj file of my .net core 3.0 project:

<PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFrameworks>netcoreapp3.0</TargetFrameworks>
    <RuntimeIdentifier>win-x64</RuntimeIdentifier>  <----- SOLVES IT. Mandatory Line
</PropertyGroup>

This solved our issue for trying to get MSBuild to work as well.
k
k4st0r42

Migrating from nuget 5.4 to nuget 5.8 solve the problem on my devops build server


Same here, our DevOps build server uses .NET5. After I upgraded NuGet.exe from version 5.7 to 5.8, the error was solved.
Same here, 5.5.1 >> 5.8. Thanks!
I started getting this error after upgrading to Visual Studio 2019 (v16.8) on my build server. Using a more recent version of nuget.exe resolved the issue.
kayleeFrye_onDeck's answer is the better answer here, because it gives a pointer to an article that explains why the upgrade is the thing to do.
How to migrate nuget version?
E
Eyad

Delete the publish profile you created and create a new one. The wizard will put in the correct targetframe work for you and publish again. It should solve the problem.


This worked for me when I upgraded from 2.1 to 2.2.
Removed the whole profile and created a new one. Worked.
9
9Rune5

If your build script starts with a dotnet restore and ends with a dotnet publish --no-restore, you must make sure that they both include the same --runtime parameter.


T
TJ Rockefeller

For me the problem ended up being that one of my NuGet feeds was down, so a package was not getting updated properly. It wasn't until I ran a NuGet package restore directly on the solution that I saw any error messages related to my NuGet feed being down.


D
Dion V.

Restarting Visual Studio or unloading/reloading the project didn't work for me, but deleting the "obj" folder and then rebuilding seems to have fixed the issue.


S
Shimmy Weitzhandler

To me, the error was caused because of an existing global.json file in the solution level folder, pointing to a different .NET version. Removing that file (or changing its SDK version) resolved the problem


We added a file 'global.json' and specified version as { "sdk": { "version": "2.1.509", "rollForward": "latestFeature" } }
a
ak_01

Upgrading NuGet version from 5.5.1 to 5.8.0 fixed the issue.


k
kayleeFrye_onDeck

You should try all the other solutions here first. Failing that you can try what eventually unblocked me when none of these did. I ran into this problem when porting a Jenkins build to an Azure DevOps pipeline on a pool of agents. It took about 60 builds before I tried every other possibility. I found out that needed to do two things:

Ensure the tooling was consistent for this specific project Use a nuget restore friendly with the version of MSBuild used after finding out that mattered yet I couldn't use the proposed workaround for just updated nuget tooling.

The versions I needed to use are likely different than yours.

1:

call choco install windows-adk-all --version=10.0.15063.0 --force

call choco install windows-sdk-10.1 --version=10.1.15063.468 --force

2:

call MSBuild -t:restore Solution.sln

call MSBuild Solution.sln /t:rebuild;pack /p:Configuration=Release /p:Platform="Any CPU"
 

Sadly, the hyperlink here is the explanation that all of the other "upgrade XYZ" answers lacked.
p
phoenixstudio

I had similar issue, when I installed a new sdk version.

Exception was:

Severity Code Description Project File Line Suppression State Error NETSDK1005
Assets file '.. \RazorPages\obj\project.assets.json' doesn't have a target for 
'netcoreapp3.1'. Ensure that restore has run and that you have included 'netcoreapp3.1' 
in the TargetFrameworks for your project. RazorPages 
C:\Program Files\dotnet\sdk\5.0.102\Sdks\Microsoft.NET.Sdk
\targets\Microsoft.PackageDependencyResolution.targets    241

Solution was to select again the target version of the project.

right click on solution Properties\Application Tab Change Target framework version to something different and change it back.


The error happened to me because I mistakenly compiled the solution in an old VS version, which restored odd dependencies. This answer solved the problem to me.
e
emilsteen

I got this error when upgrading a web project from netcoreapp3.1 to net5.0.

One of the answers here pointed me in the right direction:

The publish profile still had netcoreapp3.1 as target framework. Edited the publish profile and changed target framework to net5.0 and it worked.

(Visual Studio 16.8)


Yep, 3.1 -> 6.0 for me.
g
gregsonian

A colleague ran into this after upgrading an application from dotnet core 1.1 to dotnet core 2.1. He properly updated all the targetFramework references within the various csproj files, and had no issues on his local development machine. However, we run Azure DevOps Server and build agents on-premises, so the build agent was reporting this error after a pull request build was executed.

The dotnet clean task was throwing an error because of the new targeted framework. dotnet clean uses the same targets as build, publish, etc, so after a change in target frameworks the dotnet restore must happen before the dotnet clean to update the dependent files. In hindsight this makes sense because you want to restore dependencies to the proper target framework before you do any building or deploying.

This may only affect projects with upgraded target frameworks but I have not tested it.


H
Hamed

Receiving similar error for 'netcoreapp3.1' when building using command line. It turned out to be an MsBuild switch that caused the issue. Specifically speaking:

/p:TargetFramework="netcoreapp3.1"

Removed the switch and the error was fixed.


T
TheLoneWolf91193

In my case updating visual studio 2019 to the latest version, fixed the issue.


P
Peter Csala

In my case, if you have TargetFrameworks and TargetFramework together in the csrpoj file, remove TargetFramework will solve the problem.

edit it from:

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFrameworks>netstandard2.0;net461;</TargetFrameworks>
        <TargetFramework>net461</TargetFramework><!--remove this line-->
    </PropertyGroup>
</Project>

to

<Project Sdk="Microsoft.NET.Sdk">
    <PropertyGroup>
        <TargetFrameworks>netstandard2.0;net461;</TargetFrameworks>
    </PropertyGroup>
</Project>

V
Viacheslav Mikhaylov

From my experience if you have dependencies in your solution built using "ProjectSection(ProjectDependencies) = postProject" then in this case dotnet build goes nuts.


w
willbush

I ran into the NETSDK1047 when playing around with Docker in a brand new dotnet project created using dotnet new worker and the docker file from dotnet-docker samples.

❯ docker build -t dockertest .

output elided...

/usr/share/dotnet/sdk/6.0.300/Sdks/Microsoft.NET.Sdk/targets/Microsoft.PackageDependencyResolution.targets(267,5): error NETSDK1047: Assets file '/source/obj/project.assets.json' doesn't have a target for 'net6.0/linux-musl-x64'. Ensure that restore has run and that you have included 'net6.0' in the TargetFrameworks for your project. You may also need to include 'linux-musl-x64' in your project's RuntimeIdentifiers. [/source/dockertest.csproj]
The command '/bin/sh -c dotnet publish -c release -o /app -r linux-musl-x64 --self-contained true --no-restore /p:PublishTrimmed=true /p:PublishReadyToRun=true /p:PublishSingleFile=true' returned a non-zero code: 1
dockertest on  main [✘] via .NET v6.0.202 🎯 net6.0
❯

The issue was because I forgot to add a .dockerignore file ignoring the bin and obj directories.

I only realized why because I tried different Dockerfiles from the dotnet-docker repo and got a different error which has this same resolution. I'll try to make a PR to the docs of NETSDK1047 to add this resolution. edit: link to PR https://github.com/dotnet/docs/pull/29530


J
Jamshaid K.

For me it was the happening because I had migrated my project from net5.0 to net.6.0 and the problem was caused when I was publishing the project while debugging worked fine.

https://i.stack.imgur.com/yPjfn.png

https://i.stack.imgur.com/JWK3M.png

Or you can directly change it by going into the publishing profile .pubxml file under Properties > PublishingProfiles directory.

https://i.stack.imgur.com/lsyJD.png


L
Lee Taylor

Had the same problem, for me it was that I had a space before my TargetFramework

<TargetFramework> net6.0</TargetFramework>