2011-11-30 36 views
0

我可能不完全理解範圍上的wiki article,所以如果這聽起來很愚蠢,請原諒我。
在範圍中使用OpenWrap

簡介:
我有一個解決方案(ABC.sln)有超過40個項目,並想實現OpenWrap管理軟件包。 所以,我沒有在解決方案的根文件夾下面的:

o init-wrap -all 

這工作得很好:我現在有一個在解決方案的根文件夾名爲SLN.wrapdesc文件。子文件夾中的所有.csproj文件都包含OpenWrap目標行。
然後我proceded不同的包裝與添加到解決方案:

o add-wrap -Name xxx 

同樣,這工作得很好:我的衣裳文件夾一些包裹,並從拆除舊引用後生成不破項目。

問題:
的包裹中的內容全部要所有的項目,即使對於那些並不需要它。我希望能夠指定哪些包裝放在哪裏,例如AjaxControlToolkit只進入Web項目。

我試了一下
首先,我刪除從wrapdesc的AjaxControlToolkit:

o remove-wrap AjaxControlToolkit 

這使得構建破裂(如預期)。然後,我試過如下:
1.嘗試與一個範圍添加回卷:

o add-wrap -Name AjaxControlToolkit -scope webproject 

這只是把包裹放回包裝的文件夾。然後,我將<OpenWrap-Scope>customscope</OpenWrap-Scope>添加到項目文件中,但構建仍然失敗。
2.嘗試並手動將名爲ABC.webproject.wrapdesc的文件添加到根文件夾。當我嘗試打開解決方案時,這導致以下錯誤:

The "exists" function only accepts a scalar value, but its argument "@(_WrapFile->'%(FullPath)')" evaluates to "D:\Projects\ABC.webproject.wrapdesc;D:\Projects\ABC.wrapdesc" which is not a scalar value. 

我想它不喜歡2 wrapdesc文件。這很奇怪,因爲wiki說「...你可以在你的默認描述符旁邊添加第二個描述符...」

所以現在我被卡住了。有人有主意嗎?

回答

1

per-msbuild文件實際上不是管理依賴關係的推薦方法。每個項目的做法並不完全是OpenWrap背後的設計理念,因此係統並未針對這些場景進行優化。

如果不需要從這些組件東西,然後去解決它是通過不使用任何代碼這些軟件包不使用引用的最簡單方法。這很容易解決這個問題,因爲如果沒有代碼被加入,任何東西都不會被加載(甚至不需要在磁盤上)。

也就是說,add-wrap -scope newscope將創建一個額外的.wrapdesc文件,該文件將通過獨立於原始myProject.wrapdesc創建myProject.newscope.wrapdesc文件來將新的依賴項添加到新範圍。

如果你確實想要這樣做每個項目,你有沒有嘗試過使用基於約定的範圍?喜歡的東西:

directory-structure: src\*{scope: Web=WebProjects}* 

會採取含SRC網絡中的名稱的文件夾兒童的任何項目,並分配給那些在WebProjects範圍。

我知道其中一個對我的項目至今工作良好,但您必須重新啓動VS,因爲它積極緩存某些文件並且不會看到更改。

自定義msbuild文件本身並沒有完全測試(而且wiki條目是一個設計規範而不是最終文檔,並不是所有的都是以這種方式構建的),所以它可能會或可能不會工作。高興地看看,如果你可以打開一個錯誤票http://github.com/openrasta/openwrap/issues

+0

o add-wrap - 名稱AjaxControlToolkit -scope webproject只將wrap添加到wraps文件夾,它不創建額外的.wrapdesc文件。另外,我不想將我的源代碼佈局更改爲全部位於src文件夾中。這可能是什麼錯嗎? – CarllDev

+0

所以首先不應該發生,你使用的是哪個版本的OpenWrap?我剛剛嘗試過,並按計劃運作。至於版面設計,沒有關係,系統很高興你隨時隨地都可以放置代碼 – SerialSeb