Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法生成/发布OS X自足的.NET核心可执行文件_.net_Macos_Build_Console_.net Core - Fatal编程技术网

无法生成/发布OS X自足的.NET核心可执行文件

无法生成/发布OS X自足的.NET核心可执行文件,.net,macos,build,console,.net-core,.net,Macos,Build,Console,.net Core,我在OSX上构建.NET核心控制台项目时遇到了一个噩梦 我使用的是.NET版本1.0.1 当我尝试从终端运行以下命令时 dotnet publish --framework netcoreapp1.1 --runtime osx.10.11-x64 我得到以下错误: \project.assets.json' doesn't have a target for '.NETCoreApp,Version=v1.1/osx.10.11-x64 我已经在谷歌上搜索过了,所有的文档都提到向proje

我在OSX上构建.NET核心控制台项目时遇到了一个噩梦

我使用的是.NET版本1.0.1

当我尝试从终端运行以下命令时

dotnet publish --framework netcoreapp1.1 --runtime osx.10.11-x64
我得到以下错误:

\project.assets.json' doesn't have a target for '.NETCoreApp,Version=v1.1/osx.10.11-x64
我已经在谷歌上搜索过了,所有的文档都提到向project.json添加运行时,就像这样

"runtimes": {
    "win10-x64": {},
    "win8-x64": {},
    "osx.10.10-x64": {},
    "osx.10.11-x64": {
      "#import": [ "osx.10.11", "osx.10.10-x64" ]
    },
    "osx.10.12-x64": {
      "#import": [ "osx.10.12", "osx.10.11-x64" ]
    },
    "debian.8-x64": {}
},
但是我没有projects.json,只有projects.assets.json,编译器似乎正在查找它

经过进一步调查,我发现了以下链接。这意味着project.json文件不再使用

我觉得这很疯狂

无论如何,它建议将运行时添加到.csproj文件中

我已经做到了:

 PropertyGroup>
  <RuntimeIdentifiers>win7-x64;osx.10-11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
</PropertyGroup>
请注意,OSX运行时是OSX.10-11-x64,而不是OSX.10.11-x64。这种错误似乎在web上随处可见。也许它已经改变了

现在它编译了,我得到了一个发布文件夹

但是,现在尝试运行它会出现以下错误

A fatal error was encountered. The library 'libhostpolicy.dylib' required to execute the application was not found in 'xxx/xxx'.
我已经在谷歌上搜索过了,没有一个建议或理由与我的情况相符。我已经完成了
dotnet还原
,为正确的运行时进行了构建和发布,等等。此外,我的部署类型不是“平台”,这似乎是导致此错误的另一个原因

更新2!!!!我让它工作-几乎

由于某种原因,runtimeconfig.json文件是空的

我需要补充一点:

 {
  "runtimeOptions": {
    "framework": {
      "name": "Microsoft.NETCore.App",
      "version": "1.1.0"
    }
  }
}
所以-下一个技巧是找出为什么编译器不会自动完成这项工作

TL;博士:这很好用:

<Project Sdk="Microsoft.NET.Sdk">
  <PropertyGroup>
    <OutputType>Exe</OutputType>
    <TargetFramework>netcoreapp1.1</TargetFramework>
    <RuntimeIdentifiers>win7-x64;osx.10.11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
  </PropertyGroup>
</Project>
要发布自包含的内容,您需要三件事:

  • 运行时需要通过NuGet恢复—它将其下载到本地缓存,并向
    project.assets.json
    文件添加适当的引用。这可以通过以下方式实现:
    • 项目文件中的RuntimeIdentifier
      (单数)属性。这将把项目固定/修复到一个运行时,该运行时也将始终用于构建和发布
    • 项目文件中指定多个RID的
      RuntimeIdentifiers
      (复数)属性,但不要求每个生成/发布都是特定于运行时的,允许您通过
      -r
      参数指定发布时需要的一个
    • 使用
      dotnet restore-r osx.10.11-x64
      指定还原期间的运行时
  • 2.发布期间,必须通过使用
    dotnet publish-r osx.10.11-x64
    或通过在项目文件中指定
    RuntimeIdentifier
    (单数)来指定已还原的运行时标识符

  • 项目必须可运行-这意味着在项目文件中指定
    Exe

  • 有关.NET Core支持的应用程序模型的文档,请参阅。总的来说,@Lenny D,你几乎拥有了它,但是你对osx使用了错误的字符串<代码>osx.10-11-x64不正确。正如@Martin Ullrich所指出的,您需要在.csproj中使用
    osx.10.11-x64
    。对于自包含的应用程序,runtimeconfig.json应该是空的。添加“框架”部分使应用程序不再是“自包含的”。相反,它现在是“依赖于框架的”,这意味着您的应用程序依赖于目标系统上存在的共享系统范围的.NET Core版本。您不必编辑
    project.assets.json
    文件。这是NuGet使用.csproj的输入写入的中间文件。SDK的其余部分读取此文件,以查找NuGet还原的所有资产。
    <Project Sdk="Microsoft.NET.Sdk">
      <PropertyGroup>
        <OutputType>Exe</OutputType>
        <TargetFramework>netcoreapp1.1</TargetFramework>
        <RuntimeIdentifiers>win7-x64;osx.10.11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
      </PropertyGroup>
    </Project>
    
    testapp$ dotnet restore
    testapp$ dotnet publish -r osx.10.11-x64
    testapp$ ./bin/Debug/netcoreapp1.1/osx.10.11-x64/publish/testapp
    Hello World!