使用.NET Core 3.1 sdk时,有没有一种方法可以限制.NET Core项目仅生成.dll作为输出文件?

5

使用.NET Core 3.1 sdk构建.NET Core Console应用程序时,它将生成.exe和.dll文件。但是,在使用.NET Core 2.1时,它只会生成.dll文件。有没有办法限制.NET Core 3.1 sdk仅生成.dll文件作为输出?


@subbaraoc 为什么问这个问题?你不能执行 .dll 文件,所以自从 .NET Core 1.0 以来,人们一直在寻找那个 .exe。如果你想避免创建包含 dotnet run mydll 调用的 .cmd 文件,那么你 需要 它。那个 .exe 只是一个引导程序,而不是真正的应用程序。 - Panagiotis Kanavos
2个回答

8
你可以通过 UseAppHost MSBuild 设置来控制此项:

The UseAppHost property was introduced in the 2.1.400 version of the .NET Core SDK. It controls whether or not a native executable is created for a deployment. A native executable is required for self-contained deployments.

In .NET Core 3.0 and later versions, a framework-dependent executable is created by default. Set the UseAppHost property to false to disable generation of the executable.

<PropertyGroup>
    <UseAppHost>false</UseAppHost>
</PropertyGroup>
如果您想在命令行构建时禁用此功能,而不是在 .csproj 中进行设置,请将该属性作为参数传递。例如:
dotnet build /p:UseAppHost=false

0
在.NET中,.exe和.dll之间的区别实际上非常小。.exe往往只是带有一些引导代码和起始点(其主方法将被调用的类)的.dll。
您可以将.NET .exe和.dll都用作项目引用。可能会有一些细节上的差异,例如COM互操作,但我不指望它。
编译器将构建什么,取决于它的输入。其中包括项目设置。有一种特殊类型的库项目。随着版本更改,正确读取项目文件的方式可能会被破坏。当然,将某些代码“分离出来”成为.dll的选项也存在。现在大多数程序都是.dll而不是可执行文件。保持.exe较小可能会有益处。

我指的是.NET Core控制台应用程序,它们具有主方法,并在构建时生成“.dll”类型的输出。 - subbaraoc
@subbaraoc Christopher的回答解释了在项目引用方面,您不应该关心扩展名是.dll还是.exe。为什么您要完全删除.exe呢? - Panagiotis Kanavos
@PanagiotisKanavos:如果我的项目是“ClassLibrary”类型,那么Christopher的回答是正确的,但我正在使用“Console Application”类型的项目。 - subbaraoc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接