2016-01-23 68 views
0

我写了一个简单的小控制台应用程序作为AspNet5控制台软件包在Dnx/AspNet5中运行简单的控制台应用程序,并且不会在Visual Studio之外运行?

namespace ConsoleApp1 
{ 
    public class Program 
    { 
     public static void Main(string[] args) 
     { 
      Console.WriteLine("Hello world"); 
      Console.ReadLine(); 
     } 
    } 
} 

通过在Visual Studio调试运行这一点,我得到的Hello World命令窗口中写的,但是当我编译这与项目属性“生产上生成输出”我得到\产生具有以下输出 enter image description here

并用 enter image description here

℃的dnx46目录的bin \ ConsoleApp1 \调试\ app目录的伪像在app目录.cmd文件的ontents是project.json文件的

@dnx --appbase "%~dp0." Microsoft.Dnx.ApplicationHost ConsoleApp1 %* 

内容如下

{ 
    "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()代码放在运行中暂停应用程序以查看输出结果,但是我看到它闪烁然后消失。我也尝试使用以下命令“dnx ConsoleApp1”从powershell中的应用程序目录运行它,但它不会运行。这只是一个简单的控制台应用程序,不应该很难运行,但我似乎无法让它在Visual Studio环境之外运行。我究竟做错了什么????

更新1 我得到这个运行从SRC的目录执行,但我似乎无法从文物目录相同方式运行的输出。有任何想法吗???

PS C:\Users\Doug\Documents\Visual Studio 14\Projects\WebApplication2\src\ConsoleApp1> dnx run 
Hello world 

正如一个供参考,这里是我dnvm列表输出 enter image description here

更新2 下面是如果我改变了“.CMD”文件的目录,并尝试手动执行它的输出在一个开放的窗口中,这就是为什么它只是终止和关闭......由于.cmd文件的内容,我认为这至少会起作用......我会尽快发布dnu发布。如果发布工作,那么artifacts目录中生成的.cmd文件的重点是什么。

enter image description here

更新3

好了,我跑了DNU从包含该项目的源文件的目录发布命令。输出如下。

enter image description here

由此产生的“.CMD”文件在目录结构中突出显示的是双次点击和cmd.exe窗口出现了正确的输出。目录结构和输出如下。 enter image description here

然而,这让我很好奇......当我运行相同DNU由编译生成的工件目录的发布命令和“生产建设输出”选项打勾,并将所得.cmd文件将不执行控制台程序???工件目录中的输出与程序源中的文件之间有什么区别,它们允许将所有内容拉到一起执行。

PS ...这似乎很多工作只是为了让一个控制台程序在Visual Studio外运行!这是DNX的意图吗?没有exe的?只是好奇

UPDATE 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> 

这是造成运行命令DNU在文物目录发布目录...输出的输出是相同的,但.cmd文件将无法运行

enter image description here

灿你告诉我运行在项目的/ src目录和生产输出上的/ artifacts目录之间的区别?

PS:对于这么长的帖子感到抱歉,只是真的试图把我的头围绕在这个DNX的东西!再次感谢您的帮助

+0

运行'dnvm list'知道什么是您使用的运行时版本。打开一个命令promt并转到源代码:'cd C:\ Users \ Doug \ Documents \ Visual Studio 14 \ Projects \ WebApplication2 \ src \ ConsoleApp1'。并运行'dnx ConsoleApp1'。并分享输出。 –

+0

阅读更新。我明白了这一点。从src目录中。但是该目录包含源代码。我想知道为什么我不能从构建输出的工件目录运行。 – DRobertE

回答

2

由于您列出了多个问题,我将逐一解决它们。

双击cmd文件将不会运行该程序。我将ReadLine()代码放在运行中暂停应用程序以查看输出结果,但是我看到它闪烁然后消失。

这是预期的。 cmd文件在新控制台中启动应用程序,当进程终止时,控制台关闭。

您有几种选择:

  1. 就像你一样,在节目的末尾添加的ReadLine。
  2. 从控制台运行cmd文件。
  3. 保持控制台打开按照此问题的说明Batch files : How to leave the console window open

更新1我这运行从SRC的目录执行后运行,但我似乎无法运行输出与artifacts目录中的方式相同。有任何想法吗???

“生成生成输出”不生成可运行的可执行文件(是的,这很令人困惑),但是nuget包。

那么,DNX世界:

  1. 如果产生上生成输出,这是运行dnu pack的等价物。
  2. 如果要创建具有可运行应用程序的文件夹,则必须运行dnu publish(或从VS发布)。根据您传递的参数,您将获得一个具有可运行应用程序,其依赖关系以及可选运行时的文件夹。

    因此,包含已发布的应用可以用产生的自:

    dnu publish --runtime <runtime name or "active"> --no-source 
    

    --no-source参数将预编译您拥有源(这是你会得到一个经典的C#应用​​程序最接近)项目。没有这个说法,每当应用程序启动时,源代码就会被动态编译。

    发布命令的默认输出是下bin\output

+0

我在程序结尾处有一个ReadLine ...你可以在Main()的结尾处看到它在控制台应用程序内容中的位置。我试图在已经打开的命令提示符下运行ConsoleApp1.cmd,它不会运行。由于它是一个“.cmd”文件,我认为你可以双击它来运行应用程序,因为在输出文件中没有产生.exe文件。我会稍微尝试dnu发布并让你知道,谢谢你的所有信息! – DRobertE

+0

Victor,我刚刚尝试了一些事情,你告诉我,一个工作,但一些其他的事情没有......不知道当bin/output的内容看起来像dnu发布在/ artifacts和/ src之间有什么区别在这两种情况下都是相同的 – DRobertE

+0

维克托也如果你有机会,请你看看我有这个问题。 http://stackoverflow.com/questions/34977129/aspnet5-default-web-application-project-wont-run我会很感激你可能有任何洞察力。 – DRobertE

相关问题