2016-07-29 102 views
2

我在Visual Studio中有一個dotnet cli WebApp,使用新的xproj擴展和project.json。保持IIS Express在dotnet cli web項目上運行.NetCoreApp

dotnet new --t web --lang c# 

我得到了一個網站的工作和運行.NetCoreApp就好了。但是,我無法在IIS中加載該站點,而無需向其中添加中間件,這取決於IIS,我寧願不這樣做。

所以我使用IIS Express。

爲此我必須運行該項目以使IIS能夠在調試模式下使用該站點運行。

我想知道的是如何讓IIS Express保持運行,並在運行項目時附加到它。

我已閱讀關於禁用「編輯並繼續」的所有指南。這確實對ASP.Net Web應用程序有效,但這是一個dotnet核心WebApp,並且不是同一個項目類型。它沒有帶有選項的「屬性」窗口,禁用「編輯並繼續」,禁用IDE的「調試選項」中的「編輯並繼續」不起作用。

當我停止運行項目時IIS關閉。

任何想法?

(可選)我如何配置它在本地在IIS中運行而不依賴於它,最好的選擇是我可以在那裏使用條件編譯。

+0

您應該再次檢查描述並清楚區分IIS和IIS Express。目前你將兩者混合在一起,這個問題很難理解。 –

+0

現在我想出瞭如何使用「dotnet run」,這就是我想要的。我的目標是讓我的網站在沒有附加調試器的情況下運行。 dotnet運行和紅隼工作得很好。 我會很快刪除這個問題。 –

+0

@Ryios請不要刪除這個問題...而是考慮張貼您的解決方案作爲答案。謝謝 – objectNotFound

回答

5

我的問題的全部目的是爲了能夠讓我的網站在Visual Studio中不使用f5而且沒有附加調試器的情況下運行。

結果很簡單。

您可以在控制檯終端中的Kestrel中運行它。

只需打開一個終端或命令提示符下您的項目根型:

dotnet run 

這將運行隼對你的項目,並告訴你這是在哪個端口上。然後,您可以在瀏覽器中點擊http://localhost:5000(或者端口位於)。

更新:你可以殺死你對IIS Express的依賴,也可以在你的整個應用程序中使f5運行在Kestrel中。

要做到這一點:

  1. 右鍵單擊您的項目並轉到屬性
  2. 單擊調試選項卡
  3. 單擊新建的配置文件旁的下拉
  4. 叫它紅隼開發
  5. 將啓動類型更改爲「Project」
  6. 將應用參數設置爲「dotnet run」
  7. 添加的環境變量爲「ASPNETCORE_ENVIRONMENT」
  8. 將值設置爲「發展」
  9. 添加的環境變量爲「ASPNETCORE_URLS」
  10. 給它的一個值「http://localhost:8080」或者你想讓它運行的任何網址/端口。

重複的「茶隼生產」上面的選項,但設置ASPNETCORE_ENVIRONMENT到「生產」

的ASPNETCORE_ENVIRONMENT是用來處理您的JSON配置轉換。

public Startup(IHostingEnvironment env) 
    { 
     var builder = new ConfigurationBuilder() 
      .SetBasePath(env.ContentRootPath) 
      .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true) 
      .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true) 
      .AddEnvironmentVariables(); 

     Configuration = builder.Build(); 
    } 

所以,如果你想appSettings.json發展(本地),分期和生產,那麼你將創建3個appSettings.json文件

appSettings.json 
appSettings.Development.json 
appSettings.Staging.json 
appSettings.Production.json 

然後你做.Staging.Json等文件可選,上面有選項:true config選項。

因此,在appSettings.json中,所有環境中的所有內容都是相同的。

然後在appSettings.Development.json中,您可能只有在本地運行時才需要的東西。

等等等等

您爲每個環境創建一個配置文件,因此,如果您運行的「茶隼發展」它使用appSettings.Development.Json

如果你運行「隼轉移」,它使用appSettings.Staging以.json。

如果您運行「紅隼生產」,它使用appSettings.Production.json。

這也會影響您的tagHelper在您的MVC Views中的工作方式,例如,

<environment names="Development"> 
    <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" /> 
    <link rel="stylesheet" href="~/css/site.css" /> 
</environment> 
<environment names="Staging,Production"> 
    <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.6/css/bootstrap.min.css" 
      asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css" 
      asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" /> 
    <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" /> 
</environment> 

在該html中,如果您正在運行「Kestrel Development」,那麼會輸出用於開發的環境標記內的html。

如果您正在運行Kestrel Production,則輸出用於分段,生產的環境標記中的html。

+0

謝謝。這很有幫助。 – objectNotFound

+0

很高興幫助,只是希望它不需要我花2個小時就能搞定。我建議在開始核心項目之前閱讀所有的dotnet cli命令教程。 現在,我只需要獲取bundleConfig.Json以及所有標記幫助器的工作和我的業務。 –

+0

好的...因爲這是所有全新的科技我想更多的問題和自我解答然後呢? :) – objectNotFound

3

如果您在沒有調試器的情況下運行(Ctrl + F5或在Debug - > Run Without Debugger菜單中運行),應用程序將繼續在IIS Express中運行(假設您使用默認設置)。您可以進行更改並刷新瀏覽器,而無需發佈或重新啓動。

使用常規IIS,您可以將網站/應用程序指向項目文件夾,並且每次更改後都不必發佈。

+0

將IIS指向項目文件夾不能與.Net Core一起使用。該項目文件夾不包含DotNet Core的運行時間,因此無法加載。您必須將IIS指向已發佈的Dot Net Core文件夾,該文件夾通過運行DotNet Publish獲得,並且將在bin \ debug文件夾中結束,然後您無法對其進行實時更改,必須使用dotnet命令重新發佈線。 儘管IIS express部分有效。 –

+0

使dotnet在終端窗口中運行可解決問題,您可以對網站進行實時更改,並且只需重新編譯代碼更改即可。我也覺得這樣做Kestrel方式是最好的方式,因爲它可以確保您的開發流程符合跨平臺Jedi方式。 –

+0

如果您擁有正確的配置,指向項目文件夾確實可行,但這確實不容易。例如,確保IIS中已安裝AspNetCoreModule,確保ApplicationPoolIdentity對項目文件夾具有權限,確保web.config不包含像%LAUNCHER_PATH%這樣需要用.NET替換的參數化條目。我忘了一些需要把它關掉的麻煩。 – OdeToCode

相關問題