我已经将一个简单的小型控制台应用程序编写为AspNet5控制台包
namespace ConsoleApp1
{
public class Program
{
public static void Main(string[] args)
{
Console.WriteLine("Hello world");
Console.ReadLine();
}
}
}
在Visual Studio中通过调试运行它,我得到了一个带有Hello World的命令窗口。但是当我用项目属性编译它时,#34;在构建时生成输出"我得到了一个使用以下输出生成的artifacts \ bin \ ConsoleApp1 \ Debug \ app目录
app目录中.cmd文件的内容为
@dnx --appbase "%~dp0." Microsoft.Dnx.ApplicationHost ConsoleApp1 %*
project.json文件的内容如下
{
"version": "1.0.0-*",
"description": "ConsoleApp1 Console Application",
"authors": [
"Doug"
],
"tags": [
""
],
"projectUrl": "",
"licenseUrl": "",
"compilationOptions": {
"emitEntryPoint": true
},
"dependencies": {
"ConsoleApp1": "1.0.0"
},
"commands": {
"ConsoleApp1": "ConsoleApp1"
},
"frameworks": {
"dnx46": {
"System.Console": "4.0.0-beta-23516"
}
},
"entryPoint": "ConsoleApp1",
"loadable": false
}
双击cmd文件不会运行该程序。我输入了ReadLine()代码来暂停运行中的应用程序,看看输出会是什么,但是我看到闪存然后就消失了。我还尝试使用以下命令从powershell中的app目录运行它" dnx ConsoleApp1"但它不会运行。这只是一个简单的控制台应用程序,不应该很难运行,但我似乎无法让它在visual studio环境之外运行。我做错了什么????
更新1 我让它从src的目录运行执行,但我似乎无法从artifacts目录以相同的方式运行输出。任何想法???
PS C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\src\ConsoleApp1> dnx run
Hello world
更新2 如果我改为" .cmd"的目录,下面是输出。文件并尝试在打开的窗口中手动执行它,这就是为什么它只是终止和关闭...由于.cmd文件的内容,我认为这至少会起作用...我会尽快尝试dnu发布。如果发布有效,那么artifacts目录中生成的.cmd文件的重点是什么。
更新3
好的,所以我从包含项目源文件的目录中运行了dnu publish命令。输出如下。
结果" .cmd"双击目录结构中突出显示的文件,出现cmd.exe窗口,输出正确。目录结构和输出如下。
然而,这让我很好奇......当我在编译生成的artifacts目录中运行相同的dnu publish命令时,"生成构建输出"检查选项,生成的.cmd文件不会执行控制台程序??? artifacts目录中的输出与程序源中的文件之间有什么区别,它们允许将所有内容拉到一起执行。
PS ......这似乎很简单,只是为了让控制台程序在visual studio之外运行!这是DNX的意图吗?没有exe?只是好奇
更新4 我在输出工件的目录中运行了以下内容...结果仍然是工件目录中没有可运行的程序版本,但输出文件看起来几乎与/ src目录bin中的相同。
我为没有拍摄屏幕截图而道歉,但我的屏幕不够大,无法一次抓住所有内容。
PS C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\artifacts\bin\ConsoleApp1\Debug\app> dnu restore
Microsoft .NET Development Utility Clr-x86-1.0.0-rc1-16231
CACHE https://www.nuget.org/api/v2/
Restoring packages for C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\artifacts\bin\ConsoleApp1\Debug\app\project.json
Writing lock file C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\artifacts\bin\ConsoleApp1\Debug\app\project.lock.json
Restore complete, 123ms elapsed
NuGet Config files used:
C:\Users\Doug\AppData\Roaming\NuGet\nuget.config
Feeds used:
https://www.nuget.org/api/v2/
PS C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\artifacts\bin\ConsoleApp1\Debug\app> dnu publish --runtime active --no-source
Microsoft .NET Development Utility Clr-x86-1.0.0-rc1-16231
Copying to output path C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\artifacts\bin\ConsoleApp1\Debug\app\bin\output
Using Project dependency app 1.0.0 for DNX,Version=v4.6
Packing nupkg from Project dependency app
Source C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\artifacts\bin\ConsoleApp1\Debug\app\project.json
Target C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\artifacts\bin\ConsoleApp1\Debug\app\bin\output\approot\packages\app\1.0.0
Building app for DNX,Version=v4.6
Using Project dependency app 1.0.0
Source: C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\artifacts\bin\ConsoleApp1\Debug\app\project.json
Using Project dependency ConsoleApp1 1.0.0
Source: C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\src\ConsoleApp1\project.json
Using Assembly dependency fx/mscorlib 4.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\mscorlib.dll
Using Assembly dependency fx/System 4.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.dll
Using Assembly dependency fx/System.Core 4.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Core.dll
Using Assembly dependency fx/Microsoft.CSharp 4.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\Microsoft.CSharp.dll
dnu : error CS5001: Program does not contain a static 'Main' method suitable for an entry point
At line:1 char:1
+ dnu publish --runtime active --no-source
+ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+ CategoryInfo : NotSpecified: (error CS5001: P... an entry point:String) [], RemoteException
+ FullyQualifiedErrorId : NativeCommandError
Build failed.
0 Warning(s)
1 Error(s)
Time elapsed 00:00:00.3519605
Total build time elapsed: 00:00:00.3550713
Total projects built: 1
Using Project dependency ConsoleApp1 1.0.0 for DNX,Version=v4.6
Packing nupkg from Project dependency ConsoleApp1
Source C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\src\ConsoleApp1\project.json
Target C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\artifacts\bin\ConsoleApp1\Debug\app\bin\output\approot\packages\ConsoleApp1\1.0.0
Building ConsoleApp1 for DNX,Version=v4.6
Using Project dependency ConsoleApp1 1.0.0
Source: C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\src\ConsoleApp1\project.json
Using Assembly dependency fx/mscorlib 4.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\mscorlib.dll
Using Assembly dependency fx/System 4.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.dll
Using Assembly dependency fx/System.Core 4.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\System.Core.dll
Using Assembly dependency fx/Microsoft.CSharp 4.0.0
Source: C:\Program Files (x86)\Reference Assemblies\Microsoft\Framework\.NETFramework\v4.6\Microsoft.CSharp.dll
Exported application command: ConsoleApp1
ConsoleApp1 -> C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\src\ConsoleApp1\bin\Debug\ConsoleApp1.1.0.0.nupkg
ConsoleApp1 -> C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\src\ConsoleApp1\bin\Debug\ConsoleApp1.1.0.0.symbols.nupkg
Build succeeded.
0 Warning(s)
0 Error(s)
Time elapsed 00:00:00.2780556
Total build time elapsed: 00:00:00.2790409
Total projects built: 1
Adding NuGet package C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\src\ConsoleApp1\bin\Debug\ConsoleApp1.1.0.0.nupkg to C:\Users\Doug\Documents\Visua
l Studio 14\Projects\WebApplication2\artifacts\bin\ConsoleApp1\Debug\app\bin\output\approot\packages
Installing ConsoleApp1.1.0.0
Add complete, 46ms elapsed
Removing C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\src\ConsoleApp1\bin\Debug\ConsoleApp1.1.0.0.nupkg
Removing C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\src\ConsoleApp1\bin\Debug\ConsoleApp1.1.0.0.symbols.nupkg
Bundling runtime dnx-clr-win-x86.1.0.0-rc1-update1
Time elapsed 00:00:01.1140479
PS C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\artifacts\bin\ConsoleApp1\Debug\app>
这是目录输出导致在artifacts目录中运行命令dnu publish ...输出相同,但.cmd文件不会运行
你能告诉我在项目的/ src目录和产品输出的/ artifacts目录之间运行区别吗?
PS:抱歉这么长的帖子,只是真的试图绕过这个DNX的东西!再次感谢您的帮助答案 0 :(得分:2)
由于您列出了多个问题,我将逐一解决这些问题。
双击cmd文件将不会运行该程序。我输入了ReadLine()代码来暂停运行中的应用程序,看看输出会是什么,但是我看到闪存然后就消失了。
这是预期的。 cmd文件在新控制台中启动应用程序,当进程终止时,控制台将关闭。
您有几个选择:
更新1我得到这个从src的目录运行执行,但我似乎无法以相同的方式从artifacts目录运行输出。任何想法???
“在构建时生成输出”不会产生可运行的可执行文件(是的,它令人困惑),但是nuget包。
所以,在dnx世界中:
dnu pack
。如果要创建具有可运行应用程序的文件夹,则必须运行dnu publish
(或从VS发布)。根据您传递的参数,您将获得一个文件夹,其中包含可运行的应用程序,其依赖项以及可选的运行时。
因此,可以使用以下内容生成自包含的已发布应用程序:
dnu publish --runtime <runtime name or "active"> --no-source
--no-source
参数将预先编译您拥有源的项目(这是您将获得最接近经典C#应用程序的项目)。如果没有这个参数,每次应用程序启动时都会动态编译源代码。
publish命令的默认输出位于bin\output