2012-07-03 53 views
1

我在當前項目上創建了一個DAL,它是持久性無知的,並且有一個需要直接引用的契約dll,然後是我們要掃描的實現dll IoC容器來解析ORM特定實現和映射,這些實現和映射關聯\實現合同DLL中定義的接口和POC。我的願望是將實現DLL複製到[solution root] \ lib目錄。我創建了一個包,並將實現DLL加載到內容文件夾中,並在安裝包時將它們放在[project root] \ lib中。如何複製相對於解決方案根目錄的Nuget內容文件

我的問題是我如何讓Nuget將我的實現DLL複製到[solution root] \ lib?

回答

2

我發現了一種看起來可行的方法。

  1. 在Nuget包中的內容文件夾中,將dll掃描到臨時文件夾中。
  2. 將一個Init.ps1腳本添加到Nuget包的工具文件夾(http://docs.nuget.org/docs/creating-packages/creating-and-publishing-a-package)中,每個解決方案只執行一次。在這個腳本文件複製到指定的目錄中[solution dir]\lib
  3. 添加Install.ps1文件Tools文件夾將在每一個安裝項目運行一次,將刪除臨時文件夾

那麼我可以創建另一個包我的容器註冊取決於我的dal包,並使用類似的方法來設置我的IoC註冊。所以我有

Company.Dal 
Company.Dal.Ninject 
Company.Dal.StructureMap 

,然後消費者會安裝使用,他們使用相同的容器中,這將需要安裝所需的DLL文件[solution dir]\lib的關懷和配置容器要消耗這些DLL包。

優點

  1. 它會完成這項工作。

缺點

  1. 說完就dll文件複製到所有已安裝的項目,然後將其刪除
  2. Init.ps1也運行每一個解決方案打開時

編輯 @MrMVCMan,我繼續創建了一個博客文章,記錄我是如何在這裏做到的:http://www.ryanvice.net/nuget/creating-a-nuget-package-that-will-install-files-relative-to-the-solution/

+0

可以共享代碼呢? ty – MrMVCMan

+0

403在鏈接上,這就是爲什麼SO不會做鏈接的答案... –

1

我已經創建了一個通用的nuget包,它可以解決您的問題,但使用不同的方法。它不是將包複製到lib文件夾中,而是在構建時將它們複製到構建輸出文件夾。

你nuspec文件可能是這個樣子:

<files> 
    <file src="output\Implementation.dll" target="output\Implementation.dll" /> 
    <file src="lib\Implementation.Contract.dll" target="output\Implementation.Contract.dll" /> 
</files> 

當加入這個NuGet包到項目Implementation.Contract.dll得到的添加爲參考項目,但執行不添加到項目中。

對於一個完整的例子看我在的博客 http://www.baseclass.ch/blog/Lists/Beitraege/Post.aspx?ID=6&mobile=0

+0

感謝Daniel,您對NuGet的擴展完美地工作:文件被複制到輸出文件夾,不作爲參考添加。乾杯! – flobadob

相關問題