问题标签 [runtime-identifier]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
1031 浏览

nuget - NuGet - RID 和 TFM 示例

我一直在 GitHub 上查看 NuGet3 的代码,我在https://github.com/NuGet/NuGet3/blob/a5bc907d36ddaa8d4fa6c499e50d7ebf8993ed39/src/NuGet.Client/ManagedCodeConventions.cs中看到了与预期文件夹结构相关的几个文件夹模式NuGet 包。但是,我很难找到这些示例 - 特别是 rid 和 tfm 值。

我如何知道 rid 和 tfm 的所有可能值?我知道它们的意思是运行时标识符和目标框架名称,但我真的不知道该怎么做。

我见过的文档似乎从未直接或详尽地处理过该主题。

0 投票
3 回答
9183 浏览

c# - .NET Core 中的 win/any 运行时意味着什么

我正在构建一个 C# .NET 核心应用程序,它以net452框架为目标。当我发布时,我可以指定一个运行时(--runtime),如果我不指定它使用的任何运行时win7-x64(我假设这是因为我的机器正在运行)。但是,我也可以手动指定运行时,它似乎接受我给它的任何字符串。但是,RID 目录似乎表明两者win都是any有效的。

更新:我没有任何好的答案,所以我要澄清我的问题并增加赏金。我也在 ASP.NET 核心论坛上问过,但没有得到任何回应。

  1. 如果我指定一个 RID,win7-x32我的代码是否也可以在 64 位 Windows 操作系统上运行?

  2. 如果我指定 RID win7,它将构建什么,它将构建 32 位版本还是 64 位版本?

  3. 如果我指定 RID win7,我的程序会在 Windows 8、8.1 或 10 中运行吗?

  4. RID 有什么作用any?我了解可移植部署如何在多个平台上使用,但独立部署(使用 RID 构建any)如何在 Linux 和 Windows 上运行?我误解了这个 RID 吗?

  5. 如果我指定一个 RID,blah我预计会出错。相反,我的应用程序是在bin/Release/blah目录中构建的。它只是默认为其他一些运行时吗?

0 投票
2 回答
50330 浏览

asp.net-core - .NET Core RuntimeIdentifier 与 TargetFramework

有人可以在 csproj 文件(VS2017)中解释这两个的目的吗:

我刚刚从 VS2015 迁移,现在无法发布我的 web api,因为看起来我应该只使用一个目标框架。此外,我不能指定多个 RID。所有这些改变的事情让我感到沮丧。没有什么是从头开始的,应该一遍又一遍地克服一些事情。

我只想在 Windows 上开发我的 web-api,在这里运行 xUnit 测试,然后部署 web-api 以在 linux (ubuntu) 服务器上运行。我应该在 csproj 的两个参数中输入什么?非常感谢具有良好解释的链接。

更新1

我有带有引用的 .net 核心库的 web api。从 VS2015 迁移的所有内容。现在在根项目中我有 <TargetFrameworks>netcoreapp1.1;net461</TargetFrameworks>. 当我通过 VS2017 发布时出现错误:

C:\Program Files\dotnet\sdk\1.0.3\Sdks\Microsoft.NET.Sdk\buildCrossTargeting\Microsoft.NET.Sdk.targets(31,5): error : The 'Publish' target is not supported without specified a目标框架。当前项目针对多个框架,请为发布的应用指定框架。

但我在发布时指定了目标框架为 netcoreapp1.1. 好的。<PropertyGroup Condition="$(TargetFramework)'=='netcoreapp1.1'"> <RuntimeIdentifier>ubuntu.16.10-x64</RuntimeIdentifier> </PropertyGroup>然后我按照下面的建议更新了我的 csproj 。但现在我什至无法构建应用程序,出现错误:

5>C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\Sdks\Microsoft.NET.Sdk\build\Microsoft.NET.Sdk.targets(92,5): 错误:资产文件'\ obj\project.assets.json' 没有 '.NETCoreApp,Version=v1.1/ubuntu.16.10-x64' 的目标。确保您已针对 TargetFramework='netcoreapp1.1' 和 RuntimeIdentifier='ubuntu.16.10-x64' 恢复此项目。

我只想在 windows 8.1/windows7 上使用 VS2017 开发并部署到 ubuntu 16.10。我做错了什么?

更新2

我有 8 个项目在解决方案中。其中 3 个是 xUnit 测试。因此,我们有 5 个项目。这 5 个中的 4 个是类库,1 个是我的网络应用程序。所有 4 个类库都有这个:

我的网络应用程序:

如何发布我的网络应用程序?

0 投票
1 回答
1574 浏览

c# - VS 2017 .NET 4.6.2 new ASP.NET Core Web Application (.NET Framework) defaults to x86 platform

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

0 投票
1 回答
1336 浏览

.net - .NET Core 运行时

如果我想创建 .NET Core 2.0 应用程序,例如控制台应用程序或 ASP.NET Core 2.0,我需要在我的开发机器上安装哪些 .NET 运行时?我在 Windows 10 上。

我创建了一个 .NET Core 2.0 控制台应用程序以作为 WebJob 运行。为了将其压缩并将其上传到 Azure,我遵循了这篇文章:https ://docs.microsoft.com/en-us/dotnet/core/deploying/deploy-with-cli#self-contained-deployment-with -第三方依赖

当我运行时,dotnet publish --self-contained -r win32-x64 -c Release我收到一条错误消息:

Microsoft.NETCore.App.targets(19,5):错误:项目以运行时“win32-x64”为目标,但未解析“Microsoft.NETCore.App”包的任何运行时特定包。.NET Core 可能不支持此运行时。

但如果我运行dotnet publish --self-contained -r win10-x64 -c Release,它工作正常。

只是想确保我正在以正确的方式为 Azure 准备我的应用程序。

另外我想以 64 位而不是 32 位运行我的应用程序。

0 投票
1 回答
1055 浏览

visual-studio - 如何为自包含的跨平台 .NET Core 应用指定目标运行时?

我有一个 .NET Core 控制台应用程序,并希望使其成为面向 Windows 和 Mac OS X 的独立应用程序。

根据我正在遵循的教程,这样做的方法是编辑项目文件。

为了使它成为一个独立的仅限 Windows 的应用程序,我添加了这一行。

这按预期工作,我可以发布应用程序并且一切正常。现在,要针对 Mac OS X 和 Windows,根据教程,您需要像这样更改该行。

但是,当我将其放入并尝试将更改保存到项目文件时,我遇到了以下错误。

与调试文件夹相关:

“HasTrailingSlash”函数只接受一个标量值,但它的参数“$(OutputPath)”计算结果为“bin\Debug\netcoreapp2.0\win10-x64;osx.10.12-x64\”,它不是一个标量值。C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets

与发布文件夹相关:

“HasTrailingSlash”函数只接受一个标量值,但它的参数“$(OutputPath)”计算结果为“bin\Release\netcoreapp2.0\win10-x64;osx.10.12-x64\”,它不是一个标量值。C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\Microsoft.Common.CurrentVersion.targets

一旦我摆脱所有警告,项目文件仍会保存。它们出现了好几次。具体来说,关于调试路径的 4 个警告和关于发布路径的 2 个警告(保存尝试次数?)。

在此处输入图像描述 在此处输入图像描述

当我关闭解决方案然后再次打开它时,这个特定的项目拒绝加载。它只是作为未加载的项目位于解决方案资源管理器中。

在此处输入图像描述

如果我尝试重新加载它,我会得到一个漂亮的红色小严重错误图标以及相同的消息。

在此处输入图像描述

为什么会发生这种情况,似乎是什么问题?请告知,针对 Windows 和 Mac OS X 在 Windows 机器上进行独立部署的适当方法是什么?

编辑项目文件仍然是一种有效的方法吗?我正在关注的教程由“对云充满热情的软件架构师和开发人员”于 2017 年 8 月发布。他确实评论了他编辑项目文件的方法,称当前的工具“古怪”。

更新


<RuntimeIdentifiers>win10-x64;osx.10.12-x64</RuntimeIdentifiers>

不是我输入的内容。

相反,这就是我的代码中的内容。注意单数形式。

<RuntimeIdentifier>win10-x64;osx.10.12-x64</RuntimeIdentifier>

问题在于我没有注意,也没有手动输入。我使用了代码自动完成 (IntelliSense) 并通过这些标签进行了标记。

0 投票
2 回答
3702 浏览

c# - 我可以根据 .NET Core 中的运行时标识符定义常量吗?

我有一个 .NET Core 控制台应用程序。我的目标是能够有条件地DLLImport调用一个函数并调用它,但仅限于 Windows 运行时。

我想也许如果我可以访问csproj文件中的运行时标识符,我可以有条件地为该运行时定义一个常量,然后在我的 c# 中我可以包围 DLLImport 并调用#if/#endif块。

csproj是否可以根据构建项目的运行时在 a 中设置编译常量?这专门针对面向 .NET Core 的 SDK 样式的项目格式(以 开头<Project Sdk="Microsoft.NET.Sdk">)。

注意:这个问题很接近,但适用于project.json风格项目。

或者,是否有更好的方法来实现我的目标?

0 投票
1 回答
5218 浏览

build - 发布时如何定位特定的 .NET Core 运行时?

当我发布我的 .NET Core 应用程序时,它会输出一个runtimes包含以下子目录的目录:

在我的 CI/CD 服务器上,我使用以下命令发布我的应用程序:

我在项目文件中的发布设置如下:

  • 目标框架:netcoreapp2.1
  • 部署模式:依赖框架
  • 目标运行时:win-x64

我只打算在 Windows 2016 Server 上发布此应用程序,因此runtimes不需要 OSX/Linux/Unix 文件夹。更糟糕的是,在某些情况下,这些runtimes文件夹包含已知的易受攻击的漏洞dlls,这会导致 OSA 扫描出现误报。

有没有办法将项目配置为仅输出win运行时文件夹?

更新

我已经尝试了@ahsteele 的建议,将 RID 添加到我的 csproj 文件的输出与我没有指定 RID 相同。

当我运行 CI/CD 命令示例时

我相信它会创建一个独立的部署。随着我的发布目录从 55MB 变为 120MB,从 237 个文件变为 482 个文件。

更新 2

我已经尝试为发布步骤指定我的启动项目,并且它将运行时目录构建得更紧凑。

这是我正在运行的构建命令:

这是输出:

我的解决方案中的一些项目确实指定了 netstandard2.0,一些项目指定了 netcoreapp2.0。如果您不指定目标框架或特定的 csproj 文件,Microsoft 是否会在任何地方记录,它将为您提供所有可能的运行时的所有目标框架?

0 投票
1 回答
1435 浏览

c# - 如何在 Docker 中运行 32 位 .NET Core 应用程序

我有一个 32 位 (x86) .NET Core 2.2 应用程序,我想在 Docker 容器中运行。我的应用程序的 64 位版本在容器中运行良好,但 32 位版本无法启动。不会生成 Docker 日志文件。

我使用以下命令发布我的应用程序:

这将创建一个包含可执行文件的自包含 x86 应用程序。如果我运行可执行文件,它工作正常。

然后我使用这个 Dockerfile 构建一个容器镜像:

这个命令:

当我使用此命令运行图像时:

容器立即退出,没有生成 Docker 日志。

我的应用程序非常简单,如下所示:

我使用了错误的基本图像吗?我找不到标记为 x86 的 .NET Core 运行时基础映像。

0 投票
0 回答
54 浏览

.net - 除了 TargetFramework,Visual Studio 还基于 RuntimeIdentifier 切换上下文

我在源代码中使用预处理器条件来根据 RuntimeIdentifier 发出不同的代码。但是,由于我无法选择同时基于 TargetFramework 和 RuntimeIdentifier 的上下文,因此代码始终显示为灰色。

在 Visual Studio 导航栏中,我可以在 net461 和 netstandard2.0 之间切换。如何在 TargetFramework 和 RuntimeIdentifier 之间切换以使我的代码处于活动状态?

这是我要激活的代码片段(未显示为灰色): 在此处输入图像描述

我正在使用 Visual Studio 2017 版本 15.9.23。

这是我的 csproj 的片段: