2016-01-23 74 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

相關問題