【问题标题】:Visual Studio won't use correct dotnet architecture (x86 vs x64) specified in global.jsonVisual Studio 不会使用 global.json 中指定的正确 dotnet 体系结构(x86 与 x64)
【发布时间】:2017-06-15 22:32:32
【问题描述】:

我有两个项目。一个必须用 x86 架构构建,另一个必须用 x64 构建。

在我的 global.json 中,我指定了我想使用的架构:

"sdk": {
    "version": "1.0.0-preview2-003131",
    "architecture": "x64"
}

尽管如此,对于 x64 项目,我在构建输出中看到:

1>  C:\Program Files (x86)\dotnet\dotnet.exe build "C:\websites\myproject".

我可以在 Visual Studio 2015 使用 C:\Program Files (x86)\dotnet\dotnet.exeC:\Program Files\dotnet\dotnet.exe 之间进行切换em> 通过更改我的环境变量的顺序(如 here 所述)。但我希望有一种方法可以让 Visual Studio 选择正确的版本,而不必更改环境变量顺序。

有什么想法吗?

【问题讨论】:

  • 此选项实际上用于 dotnet SDK/工具,即当您运行 dotnet run 时,版本和架构将确定 'dotnet' exe 是从 C:\Program Files\dotnet (x64) 还是C:\Program Files (x86)\dotnet (x86) 以及在 sdk 中选择正确的工具版本以使用(在各个 dotnet 位置的“sdk”文件夹内(见上文)
  • @Tseng 有趣。但是当我将架构更改为 x86 或 x64 时,Visual Studio 并不在意。它似乎总是选择我的 PATH 中的第一个(当前是 ''C:\Program files (x86)\dotnet'')
  • 你误读了我的评论。我没有说 Visual Studio 或编译器使用这个值! global.json 仅由 命令行命令 dotnet 使用,它不会改变编译架构。您可以在标签名称上看到 sdk,而不是 runtimecompile 或类似名称。在您的项目内部运行dotnet --version,当您在带有global.json(即在C:)的文件夹外部运行它时,它应该显示Version: 1.0.0-preview2-003131,然后它会显示Version: 1.0.4或为您安装的最新 SDK 是什么。就是这样
  • 如果您想要 64 位输出,您需要更改您的 csproj/项目属性中的构建设置。过去,如果同时安装了 x64 和 x86 运行时,只有最后一个运行时会出现一些问题,不知道现在是否已修复,但除非您有本地 x64-only 依赖项,否则在 C# 编译时编译到哪个并不重要相同的 CL 指令)
  • 但是 iirc 如果您在 project.json 中定义了多个运行时,它也会在 bin\Debug\<targetframework>\<runtime> 文件夹中创建适当的文件夹,即 `bin\Debug\net462\win7-x64`。但我在 2017 年 RTM 当天停止使用 VS2015

标签: visual-studio-2015 asp.net-core asp.net-core-mvc asp.net-core-1.0


【解决方案1】:

Visual Studio 将始终以 32 位运行您的应用,因为 Visual Studio 本身和工具都是 32 位的。

但是,当您发布应用时,它将使用 64 位 sdk,因此一旦部署,它将以 64 位运行。

如果您真的需要在开发时以 64 位运行,您可以使用 dotnet-watch 作为替代方案。

但通常情况下,您并不真正需要 64 位,而在 Azure 中运行 32 位实际上可以save you money

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-14
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多