2011-05-12 71 views
8

如果您有ASP.NET Web站點項目類型(沒有正確的.csproj或.vpproj項目文件並且這只是一個鬆散文件的文件夾),那麼當你使用NuGet添加一個包時,它會在Bin目錄中創建一個* .dll.refresh文件來引用父包文件夾中的包的dll。在ASP.NET中使用帶有* .dll.refresh文件的NuGet具有Web部署項目的「Web站點」項目

例如,如果您從包管理器控制檯執行「install-package elmah」,則將Elmah放置在項目解決方案目錄中的packages文件夾中,並將Elmah.dll.refresh文件放置在項目的Bin夾。

當我在本地構建項目時,Visual Studio會自動引入由刷新文件引用的DLL。該網站和Elmah正常運行。我沒有將項目的Bin目錄中的Elmah.dll文件簽入到源代碼管理中(僅檢查刷新文件和軟件包文件夾)。

但是,我正在使用Web部署項目預編譯站點併爲部署執行web.config替換。以這種方式構建解決方案時,Elmah.dll不會自動插入到網站項目Bin目錄中,並且由於缺少DLL,該站點無法正確運行。

NuGet打算如何在這種情況下使用?我想檢查Bin目錄中的Elmah.dll嗎?

回答

8

這是基於上述GC。的解決方案。 添加一個類庫(csproj)並在該網站項目中引用該類庫。 將nuget包添加到類庫中。 在類庫中,實際上參考了一些類文件中的nuget包。也許創建一個一次性實例或東西。您可以使用包中包含的任何類。這會強制將.dll複製到網站項目的Bin目錄中。

+0

這是經過測試並在Visual Studio中工作,並直接在構建機器中運行MSBuild。 – 2013-02-23 18:00:47

0

我猜預編譯不會使用.refresh文件更新DLL - 也許這是由Visual Studio完成的。

如果找不到方法,可以創建一個將DLL手動複製到bin文件夾的構建步驟,或者如果您試圖避免兩個DLL副本,也許可以檢查在bin文件夾中,而不是包中的一個。您可以使用NuGet.exe重新獲取軟件包,填充軟件包文件夾(請參閱herehere

4

- 編輯 - 請參閱上述解決方案的更新版本。

只需將一個類庫項目添加到解決方案中,並將對類庫項目的引用添加到您的網站。

然後,在類庫中添加nuget,而不是網站項目。

當你的網站建立起來時,它依次拉動所有類庫的依賴關係。