.net core - publicar - VS2017 compila NetCoreApp como EXE
publicar net core en iis (5)
A partir de .NET Core 2.2, puede construir ejecutables dependientes del marco
Aunque construir una implementación autónoma puede ser una buena solución, tiene sus propios inconvenientes. (Véanse las respuestas de R. Titov y Martin Ullrichs en SCD-s.)
Afortunadamente .NET Core 2.2 admite la construcción de los llamados ejecutables dependientes de Framework , que son esencialmente un contenedor binario ( .exe en Windows) alrededor de los dll-s estándar .
De esta manera , tiene todas las ventajas (y desventajas) de la implementación estándar dependiente del marco (nuevamente, vea la respuesta de Martin), pero tiene una manera conveniente de iniciarla , sin tener que llamarla a través de la CLI de dotnet .
Puede publicar su aplicación como un ejecutable dependiente del marco utilizando la siguiente sintaxis:
dotnet publish -c Release -r <RID> --self-contained false
Donde RID es el identificador de tiempo de ejecución habitual, por ejemplo,
win-x64
o cualquier plataforma para la que desee construir (
consulte el catálogo aquí
).
Creé una NetCoreApp (v1.1) en Visual Studio 2017. Cuando lo compilo, obtengo una DLL producida en lugar del EXE esperado para el proyecto construido.
Verifiqué el archivo
csproj
y confirme que el tipo de salida está configurado como
exe
, pero no dice.
¿Alguna idea de por qué VS2017 sigue produciendo una DLL? Estoy seguro de que es una configuración rápida en algún lugar que olvidé ... también es la 1 AM. :)
<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>
Así es como se hace una publicación independiente con línea de comandos en cualquier sistema operativo: dotnet Publique C: / src / App / App.csproj -c release -r win-x64 -o output-win-x64
Además, es posible que desee reducir la salida de ~ 60 MB típicos para una aplicación Hello World simple a ~ 30 Mb utilizando ILLink .
Además, es posible que desee ir más allá y obtener un único archivo .exe de un tamaño de alrededor de 5Mb y usar ILCompiler . Ver esta respuesta .
Las otras respuestas son buenas, pero lo que a veces encuentro conveniente es:
- No es autónomo porque es probable que la máquina de destino tenga instalado el núcleo .net de la versión correcta. Esto reduce el número de dlls que necesito enviar.
-
No tiene que especificar
dotnet
en la línea de comando
Para esto, se puede usar un contenedor de archivos bat similar a estas líneas:
@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%
Si su aplicación termina en
yourapp.dll
nombre el archivo bat
yourapp.bat
y colóquelo junto al archivo dll.
Ahora, en lugar de los
dotnet yourapp.dll params
de
dotnet yourapp.dll params
, puede llamar a los
yourapp params
Tenga en cuenta que el contexto de esta respuesta es herramientas internas, por lo que todos los desarrolladores que utilicen la utilidad tendrán una configuración de máquina de desarrollo bastante estándar. Si esto se va a distribuir a un cliente externo que ejecuta quién sabe qué en sus cajas, la opción autónoma es muy superior.
Se supone que las aplicaciones .NET Core son archivos
.dll
.
OutputType
establecido en
Exe
en este caso significa "ejecutable" y hace todo lo necesario para garantizar que la salida sea ejecutable (punto de entrada del método
Main()
, archivo
.runtimeconfig.json
).
El archivo dll resultante se debe ejecutar con:
dotnet yourapp.dll
Este archivo dll funciona en todas las plataformas compatibles con .net core runtime (windows, linux, macOS). Esto se denomina implementación "portátil" o "dependiente del marco".
Si realmente desea un archivo
.exe
, considere implementaciones independientes.
Esto creará una salida que contiene su propia copia del .net core runtime y un archivo
yourapp.exe
, pero también aumenta el tamaño de la aplicación publicada y necesita actualizarse cuando se lanzan nuevas versiones del runtime.
Además, la aplicación resultante solo funciona en el sistema operativo publicado para.
Consulte la implementación de la aplicación .NET Core para obtener más detalles sobre las opciones de implementación y cómo configurarlas.
en VS2017
- Haga clic derecho en su proyecto y seleccione Publicar (en VS2019 haga clic en Construir -> Publicar)
- Seleccione ''Carpeta'' y cree un nuevo perfil
- En la pestaña ''Publicar'', haga clic en ''Configurar ...''
- Seleccione el modo de implementación: autónomo, tiempo de ejecución de destino: win-x86 (o win-x64)
- Salvar
- Publicar
en la carpeta / bin / Debug / netcoreapp2.1 / win-x86 / verá el archivo EXE