gpt4 book ai didi

.net - 无法构建/发布 OS X 自包含的 .NET Core 可执行文件

转载 作者:行者123 更新时间:2023-12-02 08:37:55 28 4
gpt4 key购买 nike

我在 OS X 上构建 .NET Core 控制台项目时遇到了一场噩梦。

我使用的是 .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 不再使用!

A mapping between project.json and csproj properties

这对我来说似乎很疯狂???!?!

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

我所做的:

 PropertyGroup>
<RuntimeIdentifiers>win7-x64;osx.10-11-x64;ubuntu.16.04-x64</RuntimeIdentifiers>
</PropertyGroup>

我仍然遇到同样的错误。

所以我有几个问题。

为什么编译器要查找projects.assets.json?我尝试将运行时添加到该文件中,但仍然看不到它。为什么?

为什么编译器没有在projects.json或.csproj文件中查找,而网络上的其他人似乎都说它应该查找?

如何更改编译器的外观?

感觉好像我错过了一些简单的东西。

顺便说一句:如果我只是使用 dotnet {projectname} 从控制台运行该项目,它运行得很好(在我的 Mac 上),因此构建不会出现任何问题,等等。

更新 ---

我对此有了更进一步的了解。看来我需要将其放在我的project.assets.json* 文件中:

 "runtimes": {
"osx.10-11-x64": {
"#import": []
},
"ubuntu.16.04-x64": {
"#import": []
},
"win7-x64": {
"#import": []
}
}

请注意,OS X 运行时是osx.10-11-x64,不是 osx.10.11-x64。这种拼写错误似乎在网络上随处可见。也许已经改变了。

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

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

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;DR 这工作正常:

<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!

为了发布独立的内容,您需要三件事:

  1. 运行时需要通过 NuGet 恢复 - 它将其下载到本地缓存并将适当的引用添加到 project.assets.json文件。这是通过以下任一方式完成的:
    • RuntimeIdentifier项目文件中的(单数)属性。这会将项目固定/修复到一个运行时,然后该运行时也始终用于构建和发布。
    • RuntimeIdentifiers项目文件中的(复数)属性指定多个 RID,但不要求每个构建/发布都特定于运行时,允许您通过 -r 指定要发布的 RID。论证。
    • 使用 dotnet restore -r osx.10.11-x64 指定恢复期间的运行时.

2. 必须在发布期间指定已恢复的运行时标识符,可以使用 dotnet publish -r osx.10.11-x64或通过指定 RuntimeIdentifier (单数)在项目文件中

  • 该项目必须可运行 - 这意味着指定 <OutputType>Exe</OutputType>在项目文件中
  • 关于.net - 无法构建/发布 OS X 自包含的 .NET Core 可执行文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43344089/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com