我正在使用Visual Studio for Mac
,我的应用程序已经编写完成,它能够满足我的要求。用户的目标平台是OSX。它依赖于两个具有自己依赖关系的Nuget包,即:
- NetMQ
- Microsoft.Extensions.Configuration.CommandLine
我运行以下命令来构建
应用程序:
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
,也就是./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://learn.microsoft.com/en-us/dotnet/core/deploying/deploy-with-cli https://learn.microsoft.com/en-us/dotnet/core/tools/project-json-to-csproj