将OpenWrap与Scope一起使用

时间:2011-11-30 15:01:46

标签: openwrap

我可能不完全理解范围界定wiki article,如果这听起来很愚蠢,请原谅我。

简介:
我有一个包含40多个项目的解决方案(ABC.sln),我正在尝试实现OpenWrap进行包管理。 所以我在解决方案的根文件夹中执行了以下操作:

o init-wrap -all

这很好用:我现在在解决方案的根文件夹中有一个名为SLN.wrapdesc的文件。子文件夹中的所有.csproj文件都包含OpenWrap目标行 然后,我继续使用以下方法将不同的包裹添加到解决方案中:

o add-wrap -Name xxx

同样,这样运行正常:我在wrapps文件夹中有一些包装,并且在从项目中删除旧引用后构建不会中断。

问题:
包装的所有内容都将发送到所有项目,即使是那些不需要它的项目。我希望能够指定哪些包装去哪里,例如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 个答案:

答案 0 :(得分:1)

每个msbuild文件实际上不是管理依赖项的推荐方法。按项目执行此操作并不是OpenWrap背后的设计理念,因此系统并未针对这些情况进行优化。

如果你不需要来自这些程序集的东西,那么解决它的最简单方法是不使用使用引用,而不使用这些程序包中的任何代码。这很容易解决问题,因为如果没有添加任何代码,任何内容都不会被加载(甚至需要在磁盘上)。

也就是说,add-wrap -scope newscope将创建一个额外的.wrapdesc文件,通过创建独立于原始myProject.wrapdesc的myProject.newscope.wrapdesc文件,将新依赖项添加到新范围。

如果您确实希望按项目执行此操作,您是否尝试过使用基于约定的范围界定?类似的东西:

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

将在名称中包含Web的src文件夹子项中的任何项目,并将它们分配给WebProjects范围。

我知道到目前为止我的项目工作正常,但你必须重新启动VS,因为它会积极地缓存某些文件并且不会看到更改。

自定义msbuild文件本身没有经过全面测试(并且wiki条目非常多的是设计规范而不是最终文档,并非所有这些都是以这种方式构建的)因此它可能会也可能不会工作。很高兴看看您是否可以在http://github.com/openrasta/openwrap/issues

上打开错误提示