资产文件 obj project.Assets.json 没有目标 VS2017

使用 Visual Studio 2017,AspNetCore 1.1.2

当我试图发布(发布版本构建)解决方案中的任何项目时,突然出现以下错误:

资产文件‘ C: example obj project.Assets.json’没有针对 ’. NETFramework,Version = v4.5.2/win7-x86’。确保恢复已经运行 并且您已经在 TargetFramework 中包含了“ net452”用于您的 您可能还需要在您的项目中包含“ win7-x86” 运行时标识符。

已经检查了 project.assets.json文件,我有:

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

还有

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

在我的 * . csproj 文件中:

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


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

没有对项目中的配置进行任何更改。唯一的问题是,我已经更新了 VS2017到今天的最新版本,15.6.3。这会引起争议吗?

89946 次浏览

根据微软的博客(奇怪的是,我的账户没有发布的权限) ,这个 不是是一个 bug,完全是由 ReSharper 引起的。如果你关掉它,问题就解决了。

错误,一个问题: 我得到这个错误,我没有 ReSharper。

经过 lot的搜索,我找到了我的错误的原因。NET 核心项目,已经从1.0升级到2.1。

在调试或发布模式下运行我的项目时,一切正常,但是当我试图发布到 Azure 时,我得到了这个错误:

资产文件’(mikesproject) obj project.Assets.json’没有’的目标。NETCoreApp,Version = v2.0’。确保恢复已经运行,并且已经在项目的 TargetFramework 中包含了“ netcoreapp2.0”。

虽然我已经更新了。NET 核心到2.1在项目属性和升级各种核心包,有一个地方没有采取这种变化... 发布配置文件。

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>

太荒谬了,是吧?

我确实希望微软的错误信息能够提供一些线索,说明这类问题的根源。

重新启动 VisualStudio 为我解决了这个错误。

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

对我来说,最后的问题是我的一个 NuGet 提要关闭了,所以一个包没有得到正确的更新。直到我在解决方案上直接运行了 NuGet 包恢复,我才看到与我的 NuGet 提要关闭有关的任何错误消息。

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.

在类似的情况下出现了这个错误。这对我有帮助: 林克

这是我在.net core 3.0项目 * . csproj 文件中的属性组:

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

删除您创建的发布配置文件并创建一个新的配置文件。向导将为您放入正确的目标框架工作并再次发布。应该能解决问题。

一个同事在将一个应用程序从 dotnet core 1.1升级到 dotnet core 2.1后遇到了这个问题。他正确地更新了各种 csproj 文件中的所有 targetFramework 引用,并且在本地开发机器上没有任何问题。但是,我们运行 Azure DevOps Server 并在内部构建代理,因此构建代理在执行请求构建之后报告此错误。

由于新的目标框架,dotnet clean任务抛出了一个错误。dotnet clean使用与构建、发布等相同的目标,因此在目标框架发生变化之后,dotnet restore mustdotnet clean之前发生,以更新依赖文件。事后看来,这是有意义的,因为您希望在进行任何构建或部署之前将依赖项还原到适当的目标框架。

这可能只会影响具有升级的目标框架的项目,但是我还没有对它进行测试。

对我来说,错误是由于解决方案级别文件夹中的一个现有 Global.json文件导致的,该文件指向一个不同的。NET 版本。 删除该文件(或更改其 SDK 版本)解决了问题

从 nuget 5.4迁移到 nuget 5.8 在我的 devops build 服务器上解决了这个问题

将 NuGet 版本从5.5.1升级到5.8.0解决了这个问题。

你应该先在这里尝试所有其他的解决方案。如果失败了,你可以尝试最终打开我,当这些都没有。在将 Jenkins 构建版本移植到代理池上的 Azure DevOps 管道时,我遇到了这个问题。我做了60个版本才尝试了其他的可能性。我发现需要做两件事:

  1. 确保工具对于这个特定的项目是一致的
  2. 发现这很重要之后使用 MSBuild 的版本,可以友好地使用 nuget 恢复,但是我不能仅仅使用更新后的 nuget 工具来实现所提出的解决方案。

我需要使用的版本可能与你的不同。

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"
 

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"

移除了开关,错误得到了修复。

当我安装一个新的 sdk 版本时,也遇到了类似的问题。

例外是:

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

解决方案是再次选择项目的目标版本。

  1. 右键单击解决方案
  2. 属性应用程序选项卡
  3. 将 Target 框架版本更改为不同的版本并将其更改回来。

如果构建脚本以 dotnet restore开始并以 dotnet publish --no-restore结束,则必须确保它们都包含相同的 --runtime参数。

当我把一个 web 项目从 netcoreapp3.1升级到 net5.0时,我得到了这个错误。

其中一个答案为我指明了正确的方向:

发布配置文件仍然使用 netcoreapp3.1作为目标框架。编辑发布配置文件并将目标框架更改为 net5.0,它工作正常。

(Visual Studio 16.8)

在我的情况下更新视觉工作室2019年的最新版本,修复了问题。

在我的例子中,如果在 csrpoj 文件中同时存在 TargetFrameworksTargetFramework,那么删除 TargetFramework将解决这个问题。

编辑内容:

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

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

根据我的经验,如果在使用“ ProjectSection (ProjectDependency) = postProject”构建的解决方案中存在依赖项 然后在这种情况下网络构建疯了。

当我在使用 dotnet new worker和来自 Dotnet-docker 样品的 Docker 文件创建的一个全新的 dotnet 项目中与 Docker 一起玩耍时,我遇到了 NETSDK1047

❯ 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
❯

这个问题是因为我忘记添加一个 .dockerignore 文件,忽略了 binobj目录。

我只是意识到为什么,因为我尝试不同的 Dockerfiles 从 dotnet-docker回购,并得到了一个 不同的错误具有相同的分辨率。我会尝试做一个公关的文件的 NETSDK1047添加这个决议。编辑: 链接到 PR https://github.com/dotnet/docs/pull/29530

对我来说,这是正在发生的事情,因为我已经把我的项目从 .net5.0迁移到 .net6.0,问题是当我发布项目,而调试工作良好。

检查发布配置文件显示其中包含 .net5.0的配置: .net5.0 publishing profile

将现有的 .net core版本改为所需的版本解决了这个问题: Change .net5.0 to .net6.0

或者可以直接更改它,方法是进入 Properties > PublishingProfiles目录下的发布配置文件 .pubxml文件。

.pubxml

有同样的问题,对我来说,这是我有一个空间之前,我的 TargetFramework

<TargetFramework> net6.0</TargetFramework>

当发布必须将 TargetFramework 更改为 net6.0时,我从 netstandard 升级到 net6.0 enter image description here

在项目目录中运行 dotnet restore --packages .nuget为我解决了这个问题。

在构建时,甚至在试图发布之前,我就遇到了 net6.0的这个问题。即使所有东西都指向 csproj,并且它有所有正确的 TargetFramework,问题是我们的回购有一个 Nuget。在它的根配置和它包括一个本地磁盘配置的另一个程序员的 NugetRepo。我破坏了 Nuget。配置文件,我能够建立该项目。它可能无法恢复 Nuget 软件包,但错误信息是误导。