我有多个使用.net核心以C#编写的小型辅助控制台应用程序。当我尝试通过Visual Studio发布它们时,在目标运行时中只有“便携式”选项。我无法取消选择它。这使得输出包含我不需要的运行时。
如果我尝试使用CLI发布仅运行“ dotnet publish -c Release”命令,它将仍然包含运行时。
我试图将.net核心SDK和应用程序更新为2.2,但这并没有给我更多选择,谷歌也没有帮助。
以下是其中一个控制台应用程序的csproj: .csproj file
以下是我在VS 2017中的发布选项: publish options
我搜索了Google数小时,试图找到解决方案。但是我尝试过的每个解决方案在发布时仍然包括运行时。
所以这是我的不得已而为之,真的希望这里有人解决。
答案 0 :(得分:0)
当我尝试通过Visual Studio发布它们时,在目标运行时中只有“便携式”选项。我无法取消选择。
Portable
(据我所知)是Visual Studio 2017中与框架相关的部署(FDD)选项。
如果我尝试使用CLI发布仅运行“ dotnet publish -c Release”命令,它将仍然包含运行时。
此official Microsoft documentation on publishing .NET Core apps with the CLI清楚地将dotnet publish -c Release
标识为命令行的FDD选项。
[T]输出包括我不需要的运行时。
在.NET Core 2.2中创建并使用dotnet new console
发布的准系统“ Hello World”控制台应用程序(dotnet publish -c Release
)在其 publish 文件夹中生成四个文件(例如, appname.deps.json
,appname.dll
,appname.pdb
和appname.runtimeconfig.json
)。
相比之下,用dotnet publish -c Release -r <RID> --self-contained true
发布的相同默认“ Hello World”控制台应用程序的完全自包含部署(SCD)(列出了here的RID)具有大约217+个文件(212个非文件)。程序.dlls),大小约为66mb。
当您说您有不必要的运行时时,我不确定您是否要指这212个.dll。但是,如果这些不是您的意思,则建议,您可能希望查看自己的代码(例如Enums
和SharedHelpers
项目),以更深入地了解此问题。
另一种选择可能是简单地重复生成的所有运行时(例如,对多个应用程序使用相同的运行时,如适用)。