【发布时间】:2026-02-08 15:20:02
【问题描述】:
我正在使用Visual Studio for Mac,我的应用程序已编写,它可以满足我的需求。用户的目标平台是 OSX。它依赖于 2 个具有自己依赖项的 Nuget 包,具体来说:
- NetMQ
- Microsoft.Extensions.Configuration.CommandLine
我向build应用程序运行以下命令:
dotnet build -c Release -r osx.10.11-x64
输出告诉我它成功并告诉我它把文件放在哪里。
该文件夹中包含以下文件,这个文件夹是我假设我分发给我的用户的,但这会导致错误,因此这个问题:
MyApp <---- executable
MyApp.deps.json
MyApp.dll
MyApp.pdb
MyApp.runtimeconfig.dev.json
MyApp.runtimeconfig.json
libhostfxr.dylib
libhostpolicy.dylib
所以我的用户收到了这个并且他们安装了dotnet 运行时。当他们去运行可执行文件时(这里是MyApp aka ./MyApp),他们会收到以下错误:
An assembly specified in the application dependencies manifest (MyApp.deps.json) was not found:
package: 'AsyncIO', version: '0.1.26'
path: 'lib/netstandard1.3/AsyncIO.dll'
现在,AsyncIO 是 NetMQ 的依赖项,这就是它的来源。但是,我可以在我的文件系统上的任何地方./MyApp 并且它可以工作。因此,我认为作为开发系统安装在我的系统上的 Nuget 包仍然可以访问,而在新用户的系统上则无法访问。我还没有真正找到任何有关从 Mac 分发的文档。我现在唯一能想到的就是分发项目文件并指示用户运行:
dotnet run -p MyApp.csproj
如果我理解正确,它将安装 nuget 包。
我也可以让用户使用:
dotnet MyApp.dll
我在谷歌搜索中看到过这种形式。不过,这让他们质疑为什么会生成可执行文件。乞丐不能挑剔,如果有办法做到这一点dotnet <dll>我很高兴,我只需要让它运行。
这里一定是我遗漏了一些东西,否则 netcore2.0 应用程序的这个细节、分布就被忽略了?
在挖掘更多内容时,这似乎也是一个有用的命令:
dotnet publish -c Release --framework netcoreapp2.0 --runtime osx.10.11-x64
这会添加所有类型的 DLL 以及所有依赖项 DLL。像publish 这样的词让我觉得这就是我们应该走的路。
这两个链接是我主要获取信息的地方:
https://docs.microsoft.com/en-us/dotnet/core/deploying/deploy-with-cli https://docs.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj
【问题讨论】:
标签: macos .net-core .net-standard .net-standard-2.0