我在Visual Studio 2017中创建了一个NetCoreApp(v1.1)。当我编译它时,我得到了一个DLL而不是预期的EXE用于构建的项目。我确实检查了csproj
文件并确认输出类型设置为exe
,但没有骰子。
为什么VS2017还在制作DLL?我确定它在某个地方快速设置,我忘记了...它也是凌晨1点。 :)
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>Exe</OutputType>
<TargetFramework>netcoreapp1.1</TargetFramework>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)'=='Debug|AnyCPU'">
<PlatformTarget>AnyCPU</PlatformTarget>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\Core.EF.SqlServer\Core.EF.SqlServer.csproj" />
</ItemGroup>
</Project>
答案 0 :(得分:69)
.NET Core应用程序应该是.dll
个文件。在这种情况下,OutputType
设置为Exe
表示“可执行”,并执行确保输出可运行所需的一切(来自Main()
方法,.runtimeconfig.json
文件的入口点)。生成的dll文件应使用以下命令运行:
dotnet yourapp.dll
此dll文件适用于.net核心运行时(windows,linux,macOS)支持的所有平台。这称为“可移植”或“框架相关”部署。
如果您真的需要.exe
文件,请考虑自包含部署。这将创建一个包含其自己的.net核心运行时副本和yourapp.exe
文件的输出 - 但它也会增加已发布应用程序的大小,并且需要在发布新版本的运行时时更新它。
此外,生成的应用程序仅适用于为其发布的操作系统。
有关部署选项以及如何设置它们的更多详细信息,请参阅.NET Core application deployment。
答案 1 :(得分:40)
在VS2017中
在文件夹\ bin \ Debug \ netcoreapp2.1 \ win-x86 \中,您将看到EXE文件
答案 2 :(得分:1)
这就是您在任何操作系统中使用命令行进行独立发布的方式: dotnet发布C:\ src \ App \ App.csproj -c版本-r win-x64 -o output-win-x64
此外,您可能希望通过使用 ILLink 将简单的Hello World应用的输出从典型的〜60MB减少到〜30Mb。
此外,您可能想更进一步,获得一个大小约为5Mb的.exe文件,并使用 ILCompiler 。 See this reply。
答案 3 :(得分:1)
尽管构建自包含部署可以是一个很好的解决方案,但它也有其自身的缺点。 (请参阅R.Titov和Martin Ullrichs在SCD-s上的回答。)
幸运的是,.NET Core 2.2支持所谓的依赖于框架的可执行文件 -s的构建,它们是本质上是包装二进制文件(在Windows上是 .exe )。围绕标准dll-s 。
通过这种方式,您具有标准框架相关部署的所有优点(和缺点)(再次参见Martin的回答),但是您有一种方便的启动方式,而不必通过 dotnet CLI进行调用。
您可以使用以下语法将其发布为与框架相关的可执行文件:
dotnet publish -c Release -r <RID> --self-contained false
其中RID是通常的运行时标识符,例如win-x64
或您希望构建的任何平台(see the catalog here)。
答案 4 :(得分:0)
其他答案很好,但是我有时发现方便的是:
dotnet
为此,可以使用类似于以下行的蝙蝠文件包装器:
@ECHO OFF
REM see http://joshua.poehls.me/powershell-batch-file-wrapper/
SET SCRIPTNAME=%~d0%~p0%~n0.dll
SET ARGS=%*
dotnet "%SCRIPTNAME%" %ARGS%
EXIT /B %ERRORLEVEL%
如果您的应用程序以yourapp.dll
结尾,请命名蝙蝠文件yourapp.bat
并将其放置在dll旁边。现在,您可以致电dotnet yourapp.dll params
yourapp params
请注意,此答案的上下文是内部工具,因此使用该实用程序的所有开发人员都将拥有相当标准的开发机设置。如果要将这些信息分发给知道他们的包装盒的外部运行客户,则自包含的选项要好得多。