4

Why?

Web Application (.NET Framework) and Core Web Application (.NET Core) both target AnyCPU platform.

Is this a bug or is there some value in doing this?

I'm on Windows 10 x64 and have installed the 4/18/2017 VS 2017 update.

Microsoft Visual Studio Enterprise 2017 Version 15.1 (26403.7) Release VisualStudio.15.Release/15.1.0+26403.7 Microsoft .NET Framework Version 4.6.01586

4

1 回答 1

4

我想这是出于兼容性的原因。x86 很可能是指你<RuntimeIdentifier>在 csproj 中的。

<PropertyGroup Condition="'$(TargetFramework)' == 'net462'">
  <RuntimeIdentifier>win7-x86</RuntimeIdentifier>
</PropertyGroup>

需要它的原因之一是拉取 Nuget 依赖项,而 ASP.NET 核心依赖于一些本机/非托管库(=不是用 C#/CLR 编写的库,而是用 C/C++ 编写的本机库),例如 libuv(请参阅NuGet)这是 ASP.NET Core 使用的异步套接字库。

如果它默认为,x64则此类应用程序无法在 x86 操作系统上恢复/运行,因此到目前为止唯一合理的设置是 x86。

对于 .NET CLR/IL 代码,体系结构(x64 或 x86)并不重要,但对于这些外部依赖项却很重要。这也是为什么当你将 project.json 项目隐蔽到 csproj 时会出错的net45原因netstandard1.x,你需要将上面的 xml 代码添加到你的 csproj 中,以向 NuGet 提示它应该恢复哪种类型的架构。

<RuntimeIdentifier>win7-x64</RuntimeIdentifier>如果您和您的同事都没有在 x86 操作系统上开发项目,您可以安全地将其更改为。有关有效 RID (RuntimeIdentifiers) 的列表,请参阅 ASP.NET Core文档。当然,对于 .NET Framework,您仅限于win*RID。

无需担心,您可以将其保留为默认值。通常没关系,因为大多数库都在 NuGet 包中附带 x64 和 x86。但是可能有一些库只能在一个或任何一个上运行。

于 2017-04-25T12:15:11.820 回答