Ada*_*lla 13 macos .net-core .net-standard .net-standard-2.0
我正在使用Visual Studio for Mac,我的应用程序是写的,它做我想要的.用户的目标平台是OSX.它依赖于2个具有自己依赖关系的Nuget包,具体来说:
我运行以下命令到build应用程序:
dotnet build -c Release -r osx.10.11-x64
Run Code Online (Sandbox Code Playgroud)
输出告诉我它成功并显示我放置文件的位置.
包含在该文件夹中的是以下文件,这个文件夹是我假设我分发给我的用户,但这会导致错误,因此这个问题:
MyApp <---- executable
MyApp.deps.json
MyApp.dll
MyApp.pdb
MyApp.runtimeconfig.dev.json
MyApp.runtimeconfig.json
libhostfxr.dylib
libhostpolicy.dylib
Run Code Online (Sandbox Code Playgroud)
所以我的用户收到了这个,他们已经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'
Run Code Online (Sandbox Code Playgroud)
现在,AsyncIO是一个依赖,NetMQ所以它来自哪里.但是,我可以./MyApp从我的文件系统的任何地方,它的工作原理.因此,我认为我的系统上安装的Nuget软件包作为开发系统仍然可以访问,而新用户的系统则不然.我还没有找到任何与Mac发行有关的文档.我现在唯一能想到的就是分发项目文件,并指示用户运行:
dotnet run -p MyApp.csproj
Run Code Online (Sandbox Code Playgroud)
如果我理解正确,将安装nuget包.
我也可以让用户使用:
dotnet MyApp.dll
Run Code Online (Sandbox Code Playgroud)
我在google搜索中看到了这种形式.这引起了他们的质疑,但是为什么会生成可执行文件.乞丐不能选择,如果这样做dotnet <dll>我很开心,我只需要让它运行.
我必须在这里找到一些东西,否则netcore2.0应用程序的这个细节,分布只是被忽略了?
在挖掘更多这个似乎也是一个有用的命令:
dotnet publish -c Release --framework netcoreapp2.0 --runtime osx.10.11-x64
Run Code Online (Sandbox Code Playgroud)
并且它还添加了各种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
Oma*_*jid 15
你对于build和之间的区别有正确的直觉publish.
dotnet build将构建本地开发的应用程序.一个方面是构建将假设所有依赖关系都可通过本地nuget缓存获得.
dotnet publish将构建应用程序以部署到其他计算机.这明确地处理依赖关系.
有两种发布模式:自包含部署和依赖于框架的部署.
依赖于框架的部署依赖于系统上已存在的框架.如果以此模式发布应用程序,则只包括应用程序及其依赖项.
要在FDD中发布,请使用:
dotnet publish -c Release --framework netcoreapp2.0
Run Code Online (Sandbox Code Playgroud)
相反,自包含部署将包括整个.NET Core运行时以及您的应用程序及其依赖项.
要发布SCD,请使用:
dotnet publish -c Release --framework netcoreapp2.0 --runtime osx-x64
Run Code Online (Sandbox Code Playgroud)
(顺便说一句,请使用更一般osx-x64而不是非常具体的osx.10.11-x64)
你看到两种出版方式的区别吗?它只是运行时ID的存在/不存在.在您的示例中,当您使用--runtimeflag时,您要求将您的应用程序发布为SCD,最终包括所有.NET Core运行时.只是把它留下来你应该得到你期望的.
将应用程序发布为FDD时,应该会看到bin/Release/netcoreapp2.0/publish源代码中调用的目录.使用该目录(而不是 bin/Release/netcoreapp2.0/)作为发布存档.您的用户应该运行dotnet ./path/to/publish/MyApp.dll.
有关更多信息,请查看https://docs.microsoft.com/en-us/dotnet/core/deploying/.
跟进@omajid 的回答,
如果您想将控制台应用程序打包在一个漂亮整洁的包中,您只需“单击”它,它就会打开一个终端来启动您的应用程序...这是一个示例应用程序(带有树图标):
您首先需要一个像这样的文件夹/文件结构(从 mkdir 开始!):
然后在info.plist中,粘贴进去
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>CFBundleDevelopmentRegion</key>
<string>English</string>
<key>CFBundleExecutable</key>
<string>launcher</string>
<key>CFBundleIconFile</key>
<string>trees.icns</string>
<key>CFBundleInfoDictionaryVersion</key>
<string>6.0</string>
<key>CFBundlePackageType</key>
<string>APPL</string>
<key>CFBundleShortVersionString</key>
<string>2.2</string>
<key>CFBundleSignature</key>
<string>xmmd</string>
<key>CFBundleVersion</key>
<string>2.2</string>
<key>NSAppleScriptEnabled</key>
<string>NO</string>
</dict>
</plist>
Run Code Online (Sandbox Code Playgroud)
从互联网上的某个 .icns 站点获取“trees.icns” 。
然后将dotnet publish -c Release --framework netcoreapp3.1 --runtime osx-x64命令中的所有内容复制到 osx-x64 文件夹中(这里将有大量 .dll 文件..我有〜197)
最后launcher添加以下脚本:
#!/bin/sh
# Set the working directory
DIR=$(cd "$(dirname "$0")"; pwd)
# Run the application
echo "running from $DIR/osx-x64"
open -a Terminal $DIR/osx-x64/dotnetconsole
Run Code Online (Sandbox Code Playgroud)
参考:打包jar教程
| 归档时间: |
|
| 查看次数: |
3392 次 |
| 最近记录: |