标签: runtime-identifier

win /任何运行时在.NET Core中意味着什么

我正在构建一个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. 什么是anyRID吗?我理解可移植部署如何在多个平台上使用,但独立部署(使用RID构建any)如何在Linux和Windows上运行?我误解了这个RID吗?

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

.net c# .net-core runtime-identifier

34
推荐指数
2
解决办法
6138
查看次数

.NET Core RuntimeIdentifier与TargetFramework

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

<TargetFramework>netstandard1.6</TargetFramework>
<RuntimeIdentifier>win7</RuntimeIdentifier>
Run Code Online (Sandbox Code Playgroud)

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

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

UPDATE1

我有web api和引用的.net核心库.从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):错误:如果未指定"发布"目标,则不支持目标框架.当前项目针对多个框架,请指定已发布应用程序的框架.

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

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.我做错了什么?

UPDATE2

我有8个项目正在解决.其中3个是xUnit测试.因此我们有5个项目.这5个中的4个是类库,1个是我的web-app.所有4个类库都有:

<TargetFrameworks>netstandard1.6;net461</TargetFrameworks>    
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
    <Reference Include="System" />
    <Reference Include="Microsoft.CSharp" />
</ItemGroup>
Run Code Online (Sandbox Code Playgroud)

我的网络应用:

<TargetFrameworks>netcoreapp1.1;net461</TargetFrameworks>
<ItemGroup Condition=" '$(TargetFramework)' == 'net461' ">
    <Reference Include="System" />
    <Reference Include="Microsoft.CSharp" />
  </ItemGroup>
Run Code Online (Sandbox Code Playgroud)

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

.net-core asp.net-core asp.net-core-webapi visual-studio-2017 runtime-identifier

16
推荐指数
2
解决办法
2万
查看次数

发布时如何定位特定的.NET Core Runtimes?

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

- publish/runtimes/
   - debian.8-x64/
   - fedora.23-x64/
   - fedora.24-x64/
   - opensuse.13.2-x64/
   - opensuse.42.1-x64/
   - osx/
   - osx.10.10-x64/
   - rhel.7-x64/
   - ubuntu.14.04-x64/
   - ubuntu.16.04-x64/
   - ubuntu.16.10-x64/
   - unix/
   - win/
Run Code Online (Sandbox Code Playgroud)

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

dotnet publish -c Release -o ..\publish
Run Code Online (Sandbox Code Playgroud)

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

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

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

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

更新

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

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

dotnet publish -c Release -r win10-x86 -o ..\publish
Run Code Online (Sandbox Code Playgroud)

我相信它创建了一个自包含的部署.我的发布目录从55MB变为120MB,从237个文件变为482个文件.

更新2

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

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

dotnet publish .\startupProject.csproj -c Release -o ..\publish
Run Code Online (Sandbox Code Playgroud)

这是输出:

- …
Run Code Online (Sandbox Code Playgroud)

build .net-core runtime-identifier

6
推荐指数
1
解决办法
1087
查看次数

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

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

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

是否可以csproj根据构建项目的运行时间在一个内部设置编译常量?这是针对<Project Sdk="Microsoft.NET.Sdk">以.NET Core为目标的SDK风格的项目格式(以其开头).

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

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

c# interop .net-core runtime-identifier

4
推荐指数
1
解决办法
1359
查看次数