ASP.NET Windows x64 的核心应用程序(.NET Framework)仅在 project.assets.json 中出错

ASP.NET Core Application (.NET Framework) for Windows x64 only error in project.assets.json

我想使用 VS 2017 简化 ASP.NET Core Web Application (.NET Framework) 应用程序中的配置。

我已经知道我的网站在 x64 环境和 .NET 4.6.2 下 Windows/IIS 下会是 运行。在可预见和不可预见的未来,此应用程序没有机会使用从开发到生产的任何其他环境。

所以,我只需要 Debug x64 和 Release x64 模式。 (不需要 AnyCPU 和 x86!),所以我继续从项目中删除所有其他配置。

现在,在编译时,我收到以下错误:

'C:\Projects\MyProject\My.Website\obj\project.assets.json' doesn't have a target for '.NETFramework,Version=v4.6.2/win7-x64'.

Ensure you have restored this project for TargetFramework='net462' and RuntimeIdentifier='win7-x64'. MD.Website C:\Program Files (x86)\Microsoft Visual Studio17\Enterprise\MSBuild\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.targets

我正在 Windows 7 上开发,我不确定如何解决这个问题。有什么想法吗?

出于某种原因,我的 .csproj 文件中的 <TargetFramework> 是单数的。我添加了一个 "s",它变成了 "TargetFrameworks",它起作用了:

  <PropertyGroup>
    <TargetFrameworks>net462</TargetFrameworks>
    <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
  </PropertyGroup>

我手动将我的从 x86 更改为 x64。在这种情况下,仅从 Visual Studio 恢复包是行不通的,但关闭 Visual Studio、删除 project.assets.json、重新启动 Visual Studio 并重新构建项目对我有用.我离开 <TargetFramework> 单数。

命令行 nuget restore ... 可能也有效。

我没有更改我的 TargetFramework,我 运行 在包管理器控制台中的命令:

dotnet restore

而且成功了! (我正在使用 VS2017,我正在做一个指向 .net 框架的 .net 核心应用程序)

我在将 dotnetcore 控制台应用程序升级到 2.0 版后尝试将其发布到本地文件夹时遇到了这个问题。

在尝试了所有删除文件夹和 dotnet 恢复并确保应用程序和构建中的所有设置 2_0 无济于事之后。我意识到我的发布配置文件仍然以 1.1 为目标,即使当我进入编辑配置文件时 2.0 显示为已选中,它在发布摘要中显示 1.1。所以我在下拉列表中重新选择了 2.0,它更新了摘要以显示 2.0,一切正常。

我有一个 .net 核心应用程序指向 VS2017 中的 .net 框架 4.6.1,我试图发布它。我将我的平台目标从 x86 更改为 x64,并在我尝试再次发布时开始出现此错误,但我在构建时没有遇到任何问题。我刚刚打开发布配置文件设置,一切看起来都很正常(目标运行时是 win7-x64),但这足以让我的发布开始正常工作。

由于某种原因,我的 .csproj 文件中的 <RuntimeIdentifier> 丢失了。 添加它为我解决了这个问题:

<PropertyGroup>
  <TargetFramework>net472</TargetFramework>  
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>      
  <Platforms>AnyCPU;x64</Platforms>
  <LangVersion>7.3</LangVersion>
</PropertyGroup>

检查您尝试发布的实际发布配置文件 运行。在我们的例子中,我们有一组项目必须在 Core 和常规 asp.net 之间共享,因此我们以 Core 1.1 为目标并将 运行time 版本设置为 4.6.1。在 运行 完成所有项目并将它们更新到目标版本 4.7 后,我开始在发布时遇到此错误(实际构建工作正常,本地主机调试也是如此,这是被劫持的发布)。

检查实际的 "widgets - Web Deploy.pubxml" 文件,我在底部发现了这个:

    <_DestinationType>AzureWebSite</_DestinationType>
    <TargetFramework>net461</TargetFramework>
    <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
  </PropertyGroup>
</Project>

正如该线程中的其他人所提到的,只需打开发布配置文件的 属性 sheet 就会向您显示,就我而言,该框架的目标是 4.7(这是准确的根据所涉及的项目,但没有反映文件中的实际值)...我仍然需要单击“保存”按钮以使底层 .pubxml 文件实际更新为正确的值。如果您愿意,您也可以手动编辑该文件。

这个让我抓狂。 :)

正如鲍里斯指出的那样,在我的案例中,问题出在 PublishProfiles 中。 首先,我在 .csproj 文件中添加了以下内容(如上面 post 中提到的 BluE):

<PropertyGroup>
  <TargetFramework>net472</TargetFramework>  
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>      
  <Platforms>AnyCPU;x64</Platforms>
  <LangVersion>7.3</LangVersion>
</PropertyGroup>

然后我打开我的 PublishProfile

然后点击编辑 link:

最后在打开的对话框中,将 TargetFramework 设置为项目的 FrameworkTargetRungimewin-x64然后点击保存!

就是这样!
现在,如果您尝试使用此配置文件发布您的项目,它应该可以完美运行。
希望对大家有帮助。

对我来说,将 PlatformTarget 部分移动到公共部分 PropertyGroup 修复了 Azure DevOps 构建中的相同问题:

无效:

<PropertyGroup>
    <TargetFramework>net461</TargetFramework>
    ...
    <Platforms>x64</Platforms>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    ...
    <PlatformTarget>x64</PlatformTarget>
</PropertyGroup>

作品:

<PropertyGroup>
    <TargetFramework>net461</TargetFramework>
    ...
    <Platforms>x64</Platforms>
    <PlatformTarget>x64</PlatformTarget>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|x64'">
    ...
</PropertyGroup>