2015-09-04 13 views
5

我有一個使用多個非DNX類庫的ASP.Net 5 MVC 6項目。這些庫通過dnu wrap包裝,並且所有工作都可以在IIS Express或自託管應用程序上找到。然而在IIS 8中顯示錯誤ASP.Net 5 IIS:無法解決以下依賴關係

無法解析的目標框架 「DNX,版本V4.5.1 =」下面的依賴關係:我的項目

的 列表

當前運行目標框架:「DNX,版本V4.5.1 =(dnx451)」 版本:1.0.0-beta7-15532 類型:CLR 架構:64 操作系統名稱:Windows OS版本:6.3.9600.0

如果我使用dnx 4.6(我只是降級以查看它是否適用於4.5.1),則會出現同樣的錯誤。

然而,庫可在以下位置找到:爲approot \包\ 用正確的NuGet包結構(DNU發佈其打包)

那麼,如何幫助IIS找到我的庫?

重現步驟:

  1. 創建具有2個項目的解決方案:新ASP.Net MVC應用程序和通常的類庫(未封裝)

  2. 經由DNU裹類庫包裹

  3. 來自MVC的參考類庫

  4. 發佈web應用程序(如果從Visual Studio發佈ES無法正常工作,使用DNU發佈--runtime活動)

  5. 在IIS中創建網站,並將其指向

Update上發佈的Web應用程序的wwwroot文件夾: 原來,這問題不是在IIS本身,而是在DNX中。如果我發佈網站,然後通過Microsoft.AspNet.Server.WebListener運行它,我會得到相同的錯誤。看起來像dnu發佈不能正確使用包裝項目。

但是,運行Windows服務時情況並非如此。我有一個引用相同庫的控制檯應用程序(包),我使用--no-source發佈它,然後通過sc.exe將其作爲Windows服務安裝,並且它按預期工作。

+0

您是否擁有彙編'DNX'版本4.5.1的DLL副本? – Luke

+0

你是什麼意思?我擁有爲DNX 4.5.1構建的所有DLL,並且可以爲任何DNX版本構建。這不是第三方DLL,它只是類庫項目 – Vitaly

回答

3

我的問題是,在project.json中,我有沒有庫版本的引用,只是一個空字符串。它在Visual Studio下工作,但在沒有VS的情況下運行。 我有這樣的參考,因爲在RC我沒有添加參考競爭上下文菜單,所以我手動添加它,它的工作。 因此,這裏有關於如何建立網站,在IIS中運行步驟:

1)總結你非DNX項目「DNU包」命令

2)從DNX項目添加引用您的非-DNX項目並檢查您在項目中是否有正確的版本。json(應該與wrap \ yourproject \ project.json中的版本相同)。這裏有一個例子:

"frameworks": { 
    "dnx46": { 
     "dependencies": { 
      "MyLib": "1.0.0-*"     
     } 
} 

3)發佈與DNU網站上發佈

dnu publish .\src\Web --out <outputfolder> 

4)運行參數再次發佈。這次運行時被複制到輸出文件夾。但wwwroot文件夾這次不會創建,我們已經在步驟3中發佈好了;-)。可以更改步驟3階和4

dnu publish .\src\Web --out <outputfolder> --runtime dnx-clr-win-x64.1.0.0-beta7

5)轉到outputfolder\wwwroot\web.config和類型值2個參數中的AppSettings:DNX-版本和DNX-CLR。下面是例子:

<appSettings> 
    <add key="bootstrapper-version" value="1.0.0-beta7" /> 
    <add key="runtime-path" value="..\approot\runtimes" /> 
    <add key="dnx-version" value="1.0.0-beta7" /> 
    <add key="dnx-clr" value="clr" /> 
    <add key="dnx-app-base" value="..\approot\src\Web" /> 
</appSettings> 

6)在IIS中創建新的網站,選擇與運行的.Net V4.0

7)應用程序池將您的新網站,以outputfolder \ wwwroot文件夾

8 )檢查一切正在工作

+0

對於beta8用戶及以上版本,這些指導可能沒有幫助。 beta8使用依賴於HttpPlatformHandler本地IIS模塊的不同部署模型,該模塊依賴於「無託管代碼」。 'dnu publish'應該使用'--runtime dnx-clr-win64.1.0.0-beta8',但web.config不需要這篇文章中提到的任何鍵。 – stephen