ASP.NET Core 应用程序(.NET Framework)仅支持 Windows x64,在 project.assets.json 中出现错误。

23
我想在使用VS 2017的ASP.NET Core Web Application (.NET Framework)中简化配置。 我已经知道我的网站将在Windows / IIS下以x64环境和.NET 4.6.2运行。 在可预见和不可预见的未来,此应用程序都不会使用其他任何环境,从开发到生产。 因此,我只需要Debug x64和Release x64模式(不需要AnyCPU和x86!),因此我删除了项目中的所有其他配置。现在,在编译时,我遇到以下错误:“'C:\Projects\MyProject\My.Website\obj\project.assets.json'没有.NETFramework,Version = v4.6.2 / win7-x64的目标。 确保为TargetFramework ='net462' and RuntimeIdentifier ='win7-x64'恢复了此项目。” 我正在Windows 7上开发,不确定如何解决此问题。 有什么想法吗?

删除该文件,让VS生成一个新的副本,看看是否可以解决问题。 - Lex Li
@LexLi 我应该提到在发布之前我尝试了删除、重建和所有的故障排除,但是这并没有起作用 :( - Adam
9个回答

36

由于某些原因,我的.csproj文件中的<TargetFramework>是单数形式。我添加了一个“s”并将其变为“TargetFrameworks”,这样就可以工作了:

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

我猜这是从 xprojcsproj 迁移时出现的一个 bug。你是在使用 VS2017 创建新项目时遇到了这个问题,还是也进行了迁移? - infl3x
1
对我来说,添加“s”带来了另一个问题。但是我缺少了<RuntimeIdentifier>,所以我只是添加了它。 - Naresh
当我从VS 15.3升级到15.4时发生了问题,然后一切都乱了。添加了's',然后它编译并运行了。 - Rob Koch
1
我认为这是因为更改“TargetFrameworks”触发了NuGet包的恢复。 - Feiyu Zhou
此外,您还需要运行 dotnet restore,这也是 Tiago 在下一步中提到的。 - Amin
这是什么鬼错误?我在从.NET Core 2.0更新到2.2时遇到了它。按照建议的方法操作后,错误消失了,但当我尝试发布我的Web应用程序时,它又出现了 - 需要应用James的解决方案。 - UNeverNo

9

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

dotnet restore

它起作用了!(我正在使用VS2017,做一个指向.net framework的.net core应用程序)


谢谢!它对我有用。我有一个asp.net core (.net framework)应用程序。 - Adailson De Castro
从微软文档:从.NET Core 2.0开始,您不必运行dotnet restore,因为所有需要还原的命令都会隐式运行它,例如dotnet new、dotnet build和dotnet run。在某些情况下,仍然可以使用该命令,例如在Visual Studio Team Services中进行持续集成构建或需要显式控制还原发生时间的构建系统中。 - Oracular Man

3
我尝试将一个dotnetcore控制台应用程序升级到2.0版本后,将其发布到本地文件夹时遇到了问题。尝试删除所有文件夹、进行dotnet restore,并确保应用程序和构建中的所有设置都为2_0,但都无济于事。我意识到我的发布配置文件仍然针对1.1,即使我在编辑配置文件时选择了2.0,发布摘要仍显示为1.1。所以我重新选择了下拉菜单中的2.0,更新了摘要以显示2.0,然后一切正常运作。

在尝试了以上所有方法后,这个答案对我起作用了。实际上它已经是2.1版本了,但不知何故进入发布设置并将其重置为2.1解决了问题,我成功地发布了。 - Greg Gum
我需要手动打开“配置...”对话框一次 - 在我的情况下,2.2已经存在,但我需要手动打开它一次... - UNeverNo

3

我曾手动将我的项目从x86改为x64。在这种情况下,仅从Visual Studio还原包是不起作用的,但关闭Visual Studio,删除project.assets.json文件,重新启动Visual Studio并重新构建项目对我有效。我保留了<TargetFramework>单数形式。

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


3
由于某些原因,我的 .csproj 文件中缺少 <RuntimeIdentifier>。添加这个标签解决了我的问题。
<PropertyGroup>
  <TargetFramework>net472</TargetFramework>  
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>      
  <Platforms>AnyCPU;x64</Platforms>
  <LangVersion>7.3</LangVersion>
</PropertyGroup>

1
我有一个.NET Core应用程序,指向VS2017中的.NET Framework 4.6.1,我尝试发布它。我将平台目标从x86更改为x64,然后再次尝试发布时出现了此错误,但是构建没有任何问题。我只是打开了发布配置文件设置,一切看起来都很正常(目标运行时为win7-x64),但这就足以让我的发布正常工作。

1
请检查您要运行的发布版的实际发布配置文件。在我们的情况下,我们有一组项目必须在Core和常规asp.net之间共享,因此我们将其目标设置为Core 1.1,并将运行时版本设置为4.6.1。在运行所有项目并将它们更新为目标版本4.7之后,我开始在发布时出现此错误(实际构建正常工作,本地主机调试也一样,问题出在发布上)。在检查实际的“widgets - Web Deploy.pubxml”文件时,我发现此内容位于底部:
    <_DestinationType>AzureWebSite</_DestinationType>
    <TargetFramework>net461</TargetFramework>
    <RuntimeIdentifier>win7-x64</RuntimeIdentifier>
  </PropertyGroup>
</Project>

正如本主题中其他人所提到的,简单地打开发布配置文件的属性窗格,就可以显示出我这种情况下所针对的框架是4.7(这符合涉及项目的实际情况,但并未反映在文件中的实际值)... 我仍然需要点击保存按钮才能使底层的.pubxml文件实际上更新为正确的值。如果您感兴趣,也可以手动编辑该文件。这让我非常困扰。 :)

0
对我来说,将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>

0
正如Boris所指出的那样,在我的情况下,问题出在PublishProfiles中。 首先,我在我的.csproj文件中添加了以下内容(正如BluE在上面的帖子中提到的):
<PropertyGroup>
  <TargetFramework>net472</TargetFramework>  
  <RuntimeIdentifier>win-x64</RuntimeIdentifier>      
  <Platforms>AnyCPU;x64</Platforms>
  <LangVersion>7.3</LangVersion>
</PropertyGroup>

然后我打开了我的发布配置文件

Web Publish Panel

然后点击编辑链接:

Edit Profile

最后,在打开的对话框中,将TargetFramework设置为您的项目的Framework,将TargetRungime设置为win-x64,然后单击保存

enter image description here

就是这样!
现在,如果您尝试使用此配置文件发布项目,它应该可以完美地工作。
希望能对某些人有所帮助。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接