c# - microsoft - Creación de una aplicación.NET Core a través de la línea de comandos, para que funcione en una máquina sin.NET Core instalado
instal net core (2)
¡Problema resuelto!
Lo publiqué en el rastreador de problemas de las herramientas de línea de comandos de .NET Core y resultó que se trataba de un error en la dotnet publish
; no incluía el tiempo de ejecución de C ++, que es necesario para ejecutar la aplicación compilada en una máquina sin .NET Core instalado.
La solución temporal fue instalar el tiempo de ejecución de C ++.
La solución "real" se realizó en una solicitud de extracción hace tres días, que se incluye en el último instalador ahora.
Con esta versión,dotnet publish
incluye el tiempo de ejecución de C ++, por lo que el resultado funcionará en una máquina sin .NET Core.
Mi objetivo final es crear una aplicación de consola multiplataforma (no web), por lo que estoy explorando .NET Core ahora mismo.
En mis proyectos .NET anteriores, realicé todo el desarrollo dentro de Visual Studio, pero también creé un archivo batch / MSBuild para poder construir todo el proyecto (incluyendo configuraciones, paquetes NuGet, archivos zip con binarios, etc.) con un solo clic . Aquí hay un ejemplo de un proyecto anterior .
Al final, quiero hacer algo similar con mi proyecto de prueba .NET Core.
Pero ahora mismo estoy fallando en el primer paso: no puedo compilarlo fuera de Visual Studio, por lo que el resultado funciona en otra máquina con Windows sin .NET Core instalado.
(en el primer paso, estoy ignorando la parte multiplataforma; estaré encantado de que funcione en Windows)
Lo que tengo
Logré que funcionara en Visual Studio 2015 Community Edition de la siguiente manera:
crear un nuevo proyecto en Visual Studio: "Nuevo proyecto" ⇒ "Web" ⇒ "Aplicación de consola (paquete)"
cree un nuevo perfil de publicación dentro de Visual Studio ("Crear" ⇒ "Publicar" en el menú).
Esto creará un script de PowerShell (y un archivo XML con configuraciones )
Aquí está mi proyecto de prueba en GitHub .
Cuando hago "Build" ⇒ "Publish" en el menú nuevamente, Visual Studio aparentemente ejecuta nuevamente el script PowerShell creado anteriormente.
El resultado es ligeramente superior a 90 MB, consta de 825 archivos en 598 carpetas, y se ve así:
Cuando lo copio en otra máquina (Win 7 / .NET 4 instalado / .NET Core no instalado), funciona.
Lo que intenté obtener el mismo resultado fuera de Visual Studio
1. punto de publicación
Esta respuesta y esta respuesta suenan como que puedo usar dnu publish
para lograr el mismo resultado a través de la línea de comandos.
Entiendo que partes de .NET Core todavía están moviendo objetivos en este momento, por lo que aparentemente dnu
ahora es dnu
.
Así que intenté ejecutar la dotnet publish
(y creé un archivo por lotes ) para ella:
dotnet publish "%~dp0/src/CoreTestVisualStudio" -c Release -r win7-x64 -o "%~dp0/release/cli"
El resultado consiste en un archivo .exe
y un montón de DLL, solo 25 archivos y 1.5 MB, todo en una sola carpeta:
Obviamente, falta el tiempo de ejecución de .NET Core y, como se esperaba, esta aplicación se bloquea cuando intento ejecutarlo en una máquina sin .NET Core instalado (el mismo que se mencionó anteriormente).
2. El script de PowerShell del perfil de publicación.
Intenté ejecutar el script de PowerShell (que se creó cuando creé el perfil de publicación) fuera de Visual Studio , pero falló porque el script esperaba algunos parámetros y no sé qué pasar:
param($publishProperties, $packOutput, $nugetUrl)
También hay esta línea en el guión:
# to learn more about this file visit http://go.microsoft.com/fwlink/?LinkId=524327
... pero el enlace solo apunta a la página de destino del Blog de herramientas y desarrollo web de .NET .
TL; DR
¿Qué estoy haciendo mal?
Sé que la primera versión de .NET Core se centra principalmente en ASP.NET, pero tal como lo entendí, las aplicaciones de ASP.NET Core también son aplicaciones de consola, así que pensé que una aplicación de consola básica ahora funcionaría.
Por otro lado, la mayoría de los documentos de "inicio" de la aplicación de consola todavía faltan, por lo que quizás es demasiado pronto y la dotnet publish
para aplicaciones de consola aún no está terminada.
Edite después de unos días: sospecho que no estoy haciendo nada malo y que es un problema en las herramientas de línea de comandos de .NET Core, por lo que lo publiqué en el rastreador de problemas de las herramientas de línea de comandos .
Para dnu
:
Hay una opción para dnu publish
llamada --runtime
que especifica el tiempo de ejecución que se incluirá al publicar. Usaría el nombre completo del tiempo de ejecución con el comando, por ejemplo:
dnu publish --runtime dnx-clr-win-x86.1.0.0-rc1
Para dotnet
:
No es necesario que especifique las versiones de tiempo de ejecución o de marco: de forma predeterminada, la dotnet publish
usará el marco de trabajo de project.json
y el sabor del tiempo de ejecución actual. Sin embargo, la documentation establece que:
El comando dotnet-publish también requiere ciertas dependencias en el project.json para funcionar. En concreto , se debe hacer referencia al paquete Microsoft.NETCore.Runtime como una dependencia para que el comando copie los archivos de tiempo de ejecución así como los archivos de la aplicación en la ubicación publicada .