资产文件objproject.assets.json没有目标”。

将项目文件升级到 new project file format 后,我的 executable client project.exe )当我用 msbuild 编译它时,将错误丢弃了。

错误netsdk1047:资产文件objproject.assets.json没有目标”。确保已执行还原,并且您已将“ Net48”包含在项目的目标框架中。您可能还必须在项目的运行时识别器中包括“ Win7-X86”。

我升级了很多项目,但只有 executable client project 遇到一些麻烦,其余的工作正常。

old .vbproj 格式(仅标题):

我之前使用的格式看起来像:

<?xml version="1.0" encoding="utf-8"?>
<Project DefaultTargets="Build" xmlns="http://schemas.microsoft.com/developer/msbuild/2003" ToolsVersion="4.0">
  <PropertyGroup>
    <Configuration Condition=" '$(Configuration)' == '' ">Debug</Configuration>
    <Platform Condition=" '$(Platform)' == '' ">AnyCPU</Platform>
    <ProjectGuid>{1187BEA1-xxxx-43CF-xxxx-0C142F0A16FC}</ProjectGuid>
    <OutputType>WinExe</OutputType>
    <MyType>WindowsForms</MyType>
    <RootNamespace>MyNamespace</RootNamespace>
    <AssemblyName>MyAssemblyName</AssemblyName>
    <TargetFrameworkVersion>v4.6.1</TargetFrameworkVersion>
    <FileAlignment>512</FileAlignment>
    <OptionExplicit>On</OptionExplicit>
    <OptionCompare>Binary</OptionCompare>
    <OptionStrict>On</OptionStrict>
    <OptionInfer>On</OptionInfer>
    <ApplicationIcon>MyIcon.ico</ApplicationIcon>
    <RestorePackages>true</RestorePackages>
  </PropertyGroup>

new .vbproj 格式(仅标题):

我升级的格式看起来像:

<Project Sdk="Microsoft.NET.Sdk.WindowsDesktop">
  <PropertyGroup>
    <RootNamespace>MyRootNamespace</RootNamespace>
    <AssemblyName>MyAssemblyName</AssemblyName>
    <Deterministic>false</Deterministic>
    <TargetFramework>net48</TargetFramework>
    <OutputPath>$(SolutionDir)bin$(Configuration)</OutputPath>
    <OutputType>WinExe</OutputType>
    <ApplicationIcon>MyIcon.ico</ApplicationIcon>
    <AppendTargetFrameworkToOutputPath>false</AppendTargetFrameworkToOutputPath>
    <OptionStrict>On</OptionStrict>
    <StartupObject>Program</StartupObject>
    <GenerateAssemblyInfo>false</GenerateAssemblyInfo>
    <UseWindowsForms>true</UseWindowsForms>
  </PropertyGroup>

我尝试什么?

*像例外建议一样,我将 <RuntimeIdentifier>win7-x86</RuntimeIdentifier> 添加到我的可执行客户端项目中。我知道为什么编译器在这里期待 win7-x86 。我正在处理 win10 机器。我执行 gt clean -xfd 以摆脱 obj 文件夹,但没有任何更改,同样的例外。

*我使用 dotnet restore my.sln 而不是 nuget restore

### 更多信息:

*我不确定 <StartupObject>Program</StartupObject> 是否与 <OutputType>WinExe</OutputType> 结合使用足以容纳可执行客户端项目。那是最新的吗?

*另一个奇怪的是,第一个编译效果很好。几次后,上述例外发生。该异常也可以通过完整的机器重新启动来解决,但是每次编译后我都无法重新启动机器。

*异常( NETSDK1047 )被 Microsoft.PackageDependencyResolution.targets (完整路径: C:Program Filesdotnetsdk3.1.401SdksMicrosoft.NET.SdktargetsMicrosoft.PackageDependencyResolution.targets(241,5) )抛出

*我用 nuget restore my.sln 还原解决方案依赖项和软件包

那我该怎么办? :(

stack overflow Assets file obj\project.assets.json doesn't have a target ".NETFramework,Version=v4.8/win7-x86" (NETSDK1047)
原文答案

答案:

作者头像

任何最终从 Google 来到这里的人,我都将问题追溯到 NuGetRestore MSBuild 社区任务。这是我们为恢复软件包所做的:

<Target Name="Restore">
  <NuGetRestore Solution="TestApp.sln"/>
</Target>

我没有使用它,而是让 MSBuild 任务本身进行还原:

<Target Name="BuildSolution">
  <MSBuild Projects="TestApp.sln" Properties="Platform=x64" Targets="Restore;Build" />
</Target>

注意目标。我认为当我们开始混合 SDK 样式和旧样式 csproj 项目文件格式时,这个问题就出现了。