我最近开始使用dotnet内核(而不是老式的普通.net)进行开发,以创建许多小型实用程序控制台应用程序。
开发很好,已经到了我要发布它们的地步。
我正在使用CLI,因为我只对Win 10部署感兴趣,所以尝试过
dotnet publish -c release -r win10-x64
它起作用了,并为我建立了一个“发布”文件夹,其中的所有内容似乎都可以正常工作,尽管与应用程序的大小(约500行代码)相比,“发布”文件夹很大(约70mb)。
由于我只打算部署到Win10机器上,所以有一种方法可以打包它,所以我不需要所有.NET文件吗?我认为这是-r选项的用途,但似乎并没有取得太大成就。
答案 0 :(得分:0)
这取决于您要如何部署应用程序/将使用它们的人。
-r
标志创建一个独立的应用程序。这将导致publish
命令包含指定平台所需的.NET Core DLL(以及可用的平台特定的nuget程序包),这意味着任何人都可以使用该应用程序而不必安装.NET Core运行时。 / p>
如果您删除了-r
标志,那么publish
将仅包含适用于您应用的DLL。但这意味着任何想使用您的应用的人必须首先安装.NET Core运行时。
您可以使用-o
标志将发布输出写入不同的目录,例如
dotnet publish -c release -r win10-x64 -o ./publish-win10
或
dotnet publish -c release -o ./publish-any
现在来看一下已写入./publish-win10
和./publish-any
文件夹的内容,您可以有所不同。
如果将它们安装到已经存在.NET Core运行时的系统上,则只需分发DLL并节省大量空间即可。但是,如果您希望能够分发应用程序而最终用户不必担心安装.NET Core运行时,则可以使用-r
标志来创建一个自包含的分发程序,但是这样会导致“程序包”,包括必要的.NET Core程序集。
AFAIK -r
标志不会影响您的应用程序的编译方式,只是publish
命令的一部分包含哪些运行时DLL。因此,如果为win10-x64
发布(无论是否带有-r
标志)都可以为您的代码获得相同的DLL,以便您的应用DLL可在任何(.NET Core兼容)平台上运行,但是我很高兴在这一点上得到纠正。
答案 1 :(得分:0)
.NET Core(和.NET 5)不同于习惯将构建作为创建输出的标准的.NET 4.x,它认为构建和发布非常不同。
巨大的(70MB)大小是因为发布者假设您的目标没有安装任何形式的.NET Framework,因此将其与您的项目捆绑在一起。
您可以将发布行更改为
dotnet publish -r win-x64 --self-contained false
这将单独创建.NET Core标准-一个.dll
(您的应用程序),一个.exe
(运行该应用程序),一些.json
文件进行设置,还有一个.pdb
文件用于调试符号。
要将应用程序更改为您习惯使用的.NET Framework标准输出,请在文本编辑器中的{p> 1下打开.csproj
文件。
<TargetFramework>netx.x</TargetFramework>
行,添加
<PublishSingleFile>true</PublishSingleFile>
<RuntimeIdentifier>win-x64</RuntimeIdentifier>
然后重新运行发布命令。这将在.exe
目录(可以安全删除的.pdb
文件)中产生一个publish
和一个.pdb
。
注意:由于包含了--self-contained false
,因此目标将需要安装指定版本的.NET Framework(在.csproj
文件中指定的版本)。尽管大多数Windows 10设备(通常位于C:\Windows\Microsoft.NET\Framework
或C:\Program Files\dotnet\
上当前都安装了.NET Framework的许多版本,但.NET Core / .NET 5运行时尚未普及(尽管可能会在不久的将来通过Windows Update分发),因此如果您的.exe
的收件人没有该下载,则可能需要一次性下载。
虽然.NET Core / .NET 5生成的二进制文件更大(尽管大约为150kb-而不是50MB),但它们的运行速度却比.NET Framework 4.x同类文件要快得多。